В моята локална / разработваща среда, 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 може да го направи по-добре, по-добре.