/ / Как да получим MySQLi информация за грешки в различни среди - php, mysqli, ready-statement, environment, отчитане на грешки

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