Två STÖRSTA problem med din kod och din "lösning":
- Du har
@
operatör överallt. Som du har -1 röst på din fråga.@
operatör är själva ondskan. IT ansvarar för den tomma sida du ser. - Men det botemedel du valde gjorde saken värre. Det här med "ELLER dö" är inte en magisk sång för att lösa eventuella felrapporteringsproblem. Och felaktig användning orsakar fel som en du har. som du har
1
för i felmeddelandet.
Först och främst är din inkludering okej, så låt den vara ifred.
För att få ett felmeddelande från mysqli, följ dessa instruktioner:
Istället för att lägga till "eller dö" slumpmässigt behöver du en mer robust och användbar felrapporteringslösning.
Om du använder mysqli_query() över hela applikationskoden utan att kapsla in den i någon hjälpklass, trigger_error()
är ett bra sätt att ta fram ett PHP-fel, eftersom det också berättar filen och radnumret där felet uppstod
$res = mysqli_query($mysqli,$query) or trigger_error(mysqli_error($mysqli)."[$query]");
i alla dina skript
och sedan dess kommer du att meddelas om orsaken till varför objektet inte skapades.(Om du är nyfiken på denna or
syntax, Jag har förklarat det här
- det förklarar också varför du har (1)
i felmeddelandet)
Men , om du kapslar in din fråga i någon klass, kommer filen och rad från trigger error att vara ganska värdelösa eftersom de kommer att peka på själva anropet, inte applikationskoden som orsakade vissa problem. Så när du kör inkapslade mysqli-kommandon måste ett annat sätt användas:
$result = $mysqli->query($sql);
if (!$result) {
throw new Exception($mysqli->error." [$query]");
}
som undantag ger dig en stackspårning , vilket leder dig till platsen från vilken en felaktig fråga anropades.
Observera att du måste kunna se PHP-fel i allmänhet. På en live-webbplats måste du kika in i felloggar, så inställningarna måste vara
error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);
på en lokal utvecklingsserver är det okej att göra fel på skärmen:
error_reporting(E_ALL);
ini_set('display_errors',1);
och självklart ska du aldrig använda felundertryckningsoperatorn (@) framför dina uttalanden.