To STØRSTE problemer med din kode og din "løsning":
- Du har
@
operatør overalt. Som du har -1 stemme på dit spørgsmål.@
operatør er selve ondskaben. IT er ansvarlig for den tomme side, du ser. - Men det middel, du vælger, gjorde tingene værre. Denne "ELLER dø" ting er ikke en magisk sang til at løse ethvert fejlrapporteringsproblem. Og brugt forkert vil forårsage fejl som en du har. som du har
1
til i fejlmeddelelsen.
Først og fremmest er din inkludering i orden, så lad den være.
Mens du får en fejl fra mysqli, skal du følge disse instruktioner:
I stedet for at tilføje "eller dø" tilfældigt, har du brug for en mere robust og nyttig fejlrapporteringsløsning.
Hvis du bruger mysqli_query() over hele applikationskoden uden at indkapsle den i en hjælpeklasse, trigger_error()
er en god måde at rejse en PHP-fejl på, da den også vil fortælle dig filen og linjenummeret, hvor fejlen opstod
$res = mysqli_query($mysqli,$query) or trigger_error(mysqli_error($mysqli)."[$query]");
i alle dine scripts
og siden da vil du blive underrettet om årsagen til, hvorfor objektet ikke blev oprettet.(Hvis du er nysgerrig efter denne or
syntaks, Jeg har forklaret det her
- det forklarer også, hvorfor du har (1)
i fejlmeddelelsen)
Men , hvis du indkapsler din forespørgsel i en eller anden klasse, vil fil og linje fra triggerfejl være ret ubrugelig, da de vil pege på selve opkaldet, ikke applikationskoden, der forårsagede et bestemt problem. Så når du kører mysqli-kommandoer indkapslet, skal en anden måde bruges:
$result = $mysqli->query($sql);
if (!$result) {
throw new Exception($mysqli->error." [$query]");
}
som undtagelse vil give dig en staksporing , som vil føre dig til det sted, hvorfra en fejlagtig forespørgsel blev kaldt.
Bemærk, at du generelt skal kunne se PHP-fejl. På et live-websted skal du kigge ind i fejllogfiler, så indstillingerne skal være
error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);
mens du er på en lokal udviklingsserver, er det i orden at lave fejl på skærmen:
error_reporting(E_ALL);
ini_set('display_errors',1);
og du skal selvfølgelig aldrig bruge fejlundertrykkelsesoperator (@) foran dine udsagn.