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

66

Решение

Прежде всего, всегда иметь эту строку, прежде чем 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 может сделать это лучше, намного лучше.
74

Другие решения

Я не думаю, что вы создали объект.

$ mysqli = new mysqli (‘localhost’, ‘my_user’, ‘my_password’, ‘world’);

но я действительно рекомендую вместо этого использовать PDO.

0

По вопросам рекламы [email protected]