У моєму локальному / розробницькому середовищі запит 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 і результат OK.
Відповіді:
63 для відповіді № 1Перш за все, завжди маєте цю лінію перед підключенням 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 може зробити це краще, краще.