@Duioka

PHP скрипт палит базу при неверном подключении?

Есть очень простенький скрипт, отображающий кое-какую числовую информацию. Работать-то он работает, но вот незадача, если скрипт не сможет подключиться к бд, то он раскроет всем всю подноготную самой базы. Как быть? В Php вообще не разбираюсь! Я пробовал из примеров перевести pdo на обычный mysql (может проблема в этом?), но неудача :(

<?php
$pdo = new PDO('mysql:host=localhost;dbname=mybdname;port=3306;charset=utf8','mybdname','3fJUIvtyfTD2');
$stmt = $pdo->prepare('SELECT * FROM ConomyValue WHERE username=:user LIMIT 1');
$stmt->execute(array(
'user' => $member_id['name'],
));
$balance = $stmt->fetch(PDO::FETCH_ASSOC);
if (!empty($balance)) {
$balance = $balance['balance'];
} else $balance = 0;
echo ''.$balance.'';
?>
  • Вопрос задан
  • 201 просмотр
Решения вопроса 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
А теперь правильный ответ.

PDO - не единственная библиотека в составе РНР. И не она одна выдает ошибки.
Поэтому искать решение, специфическое для PDO просто глупо. Ошибка при отправке емейла откроет данные для соединения с почтовым сервером - и т.д.

Отключать показ ошибок надо для всего РНР целиком.

И делается это очень просто. Добавляешь всего одну строчку в начало файла:

ini_set('display_errors', 0);

и всё - ни одна ошибка не появляется на экране! Причем это будут любые ошибки, а не одна конкретная.

Но тебе всё равно нужно знать, в чем проблема. Чтобы её исправить. Поэтому сам текст ошибки надо писать в лог на сервере. Это тоже делается одной командой:

ini_set('log_errors', 1);

Всего две команды, и больше ничего менять в коде не надо.
Они скроют текст ошибки от пользователя. но сохранят для того чтобы ты мог понять, в чем проблема.
Ответ написан
IgorPI
@IgorPI
try {
    $pdo = new PDO('mysql:host=localhost;dbname=mybdname;port=3306;charset=utf8','mybdname','3fJUIvtyfTD2');
    $stmt = $pdo->prepare('SELECT * FROM ConomyValue WHERE username=:user LIMIT 1');
    $stmt->execute(array(
        'user' => $member_id['name'],
    ));
    $balance = $stmt->fetch(PDO::FETCH_ASSOC);
    if (!empty($balance)) {
        $balance = $balance['balance'];
    } else $balance = 0;
    echo ''.$balance.'';
}catch (\Exception $e) {
    echo "ERROR!";
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Mysterion
try/catch с выводом своего текста, например. Ну а так, как правило, на продакшене отключается вывод всех ошибок и варнингов. И иногда даже при наличии таковых отдается какая-нибудь заглушка, а сама ошибка логируется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы