Как получить информацию об ошибках 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, и результат в порядке.
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 может сделать это лучше, намного лучше.