Dva NEJVĚTŠÍ problémy s vaším kódem a vaším „řešením“:
- Máte
@
operátor na celém místě. Pro kterou máte -1 hlas pro vaši otázku.@
operátor je samotné zlo. IT je zodpovědné za prázdnou stránku, kterou vidíte. - Náprava, kterou zvolíte, však situaci zhoršila. Tato věc „NEBO zemři“ není kouzelný chorál k vyřešení jakéhokoli problému s hlášením chyb. A nesprávné použití způsobí chyby jako ty. Pro které máte
1
v chybové zprávě.
Za prvé, vaše zahrnutí je v pořádku, takže to nechte být.
Chcete-li získat chybu z mysqli, postupujte podle těchto pokynů:
Místo náhodného přidávání „nebo zemři“ potřebujete robustnější a užitečnější řešení hlášení chyb.
Pokud používáte mysqli_query() v celém kódu aplikace, aniž byste jej zapouzdřili do nějaké pomocné třídy, trigger_error()
je dobrý způsob, jak vyvolat chybu PHP, protože vám také řekne soubor a číslo řádku, kde došlo k chybě
$res = mysqli_query($mysqli,$query) or trigger_error(mysqli_error($mysqli)."[$query]");
ve všech vašich skriptech
a od té doby budete informováni o důvodu, proč nebyl objekt vytvořen. (Pokud vás to zajímá or
syntaxe, Vysvětlil jsem to zde
- také vysvětluje, proč máte (1)
v chybové zprávě)
Nicméně , pokud zapouzdřujete svůj dotaz do nějaké třídy, soubor a řádek z chyby spouštěče budou zcela k ničemu, protože budou ukazovat na samotné volání, nikoli na kód aplikace, který způsobil určitý problém. Takže při spouštění zapouzdřených příkazů mysqli je třeba použít jiný způsob:
$result = $mysqli->query($sql);
if (!$result) {
throw new Exception($mysqli->error." [$query]");
}
protože Exception vám poskytne trasování zásobníku , který vás zavede na místo, odkud byl zavolán chybný dotaz.
Všimněte si, že musíte být schopni vidět chyby PHP obecně. Na živém webu musíte nahlédnout do protokolů chyb, takže nastavení musí být
error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);
zatímco na místním vývojovém serveru je v pořádku dělat chyby na obrazovce:
error_reporting(E_ALL);
ini_set('display_errors',1);
a samozřejmě byste nikdy neměli používat operátor potlačení chyb (@) před svými příkazy.