/ / Ako získať informácie o chybách v MySQLi v rôznych prostrediach - php, mysqli, prepared-statement, environment, reporting error

Ako získať informácie o chybách MySQLi v rôznych prostrediach - php, mysqli, prepared-statement, environment, reporting error

V mojom lokálnom / vývojovom prostredí funguje dotaz MySQLi v poriadku. Keď ho však odovzdám na webovom hostiteľskom prostredí, dostanem túto chybu:

Smrteľná chyba: Zavolajte na členskú funkciu bind_param () na ne-objekte v ...

Tu je kód:

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);

Ak chcete skontrolovať svoj dotaz, pokúsil som sa spustiť dotaz pomocou ovládacieho panela phpMyAdmin a výsledok je OK.

odpovede:

63 pre odpoveď č. 1

V prvom rade máte vždy túto linku pred pripojením MySQLi všetko vaše prostredie:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Potom sa prenesú všetky chyby služby MySQLdo PHP výnimiek. Nespracovaná výnimka zase robí PHP fatálnu chybu. Preto v prípade chyby MySQL dostanete konvenčnú chybu PHP, ktorá vám okamžite uvedomí príčinu chyby.Stavová stopa vás prevedie na presné miesto, kde sa vyskytla chyba.

Všimnite si, že musíte vidieť PHP chyby vo všeobecnosti, A tu skutočne ide otázka rôznych prostredí:

  • Na živom webe sa musíte pozrieť do protokolov chýb, preto musia byť nastavenia

    error_reporting(E_ALL);
    ini_set("display_errors", 0);
    ini_set("log_errors", 1);
    
  • Zatiaľ čo na lokálnom vývojovom serveri je na obrazovke možné urobiť chyby:

    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    

A malý zoznam toho, čo vy nemal by:

  • Používať operátor potlačenia chýb (@)
  • použitie die() alebo echo alebo akúkoľvek inú funkciu na bezpodmienečnú tlač chybnej správy na obrazovke. PHP môže odrážať to už v poriadku, nie je potrebná žiadna pomoc.
  • Testovanie výsledkov dotazu manuálne (napr if($result)) jednoducho nemá zmysel. Buď váš dotaz zlyhal a už dostanete chybovú výnimku, alebo to bolo v poriadku a nie je nič, čo by ste mali vyskúšať.
  • Použite try..catch na echo chybové hlásenie. Opäť PHP to dokáže lepšie, lepšie.