Как получить информацию об ошибках MySQLi в разных средах


В моей локальной среде/среде разработки запрос MySQLi выполняется нормально. Однако, когда я загружаю его в свою среду веб-хостинга, я получаю следующую ошибку:

Неустранимая ошибка: Вызов функции-члена bind_param() для не-объекта в...

Вот код:

global $mysqli;
$stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?");
$stmt->bind_param('i', $cur_id);
$stmt->execute();
$stmt->bind_result($uid, $desc);

Чтобы проверить свой запрос, я попытался выполнить запрос через панель управления phpMyAdmin, и результат в порядке.

Author: Peter Mortensen, 2014-03-26

1 answers

Прежде всего, всегда имейте эту строку перед подключением MySQLi в во всех ваших средах:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

После этого все ошибки MySQL будут перенесены в исключения PHP. Неперехваченное исключение, в свою очередь, приводит к фатальной ошибке PHP. Таким образом, в случае ошибки MySQL вы получите обычную ошибку PHP. Это мгновенно сообщит вам о причине ошибки. Трассировка стека приведет вас к точному месту, где произошла ошибка.

Обратите внимание, что вы должны иметь возможность видеть PHP ошибки в целом. И здесь действительно идет речь о различных средах:

  • На живом сайте вам нужно заглянуть в журналы ошибок, поэтому настройки должны быть

    error_reporting(E_ALL);
    ini_set('display_errors', 0);
    ini_set('log_errors', 1);
    
  • Находясь на локальном сервере разработки, можно делать ошибки на экране:

    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    

И небольшой список того, чего вы не должны:

  • Использовать оператор подавления ошибок (@)
  • Используйте die() или echo или любую другую функцию для печати сообщение об ошибке на экране безоговорочно. PHP уже может повторить это, никакая помощь не требуется.
  • Проверять результат запроса вручную (например, if($result)) просто не имеет смысла. Либо ваш запрос не удался, и вы уже получите исключение ошибки, либо все было в порядке, и проверять нечего.
  • Используйте try..catch для повторения сообщения об ошибке. Опять же, PHP может сделать это лучше, намного лучше.
 63
Author: Your Common Sense, 2018-04-27 12:00:23