Nogle gange producerer din PDO-kode en fejl som Call to a member function execute()
eller lignende. Eller endda uden nogen fejl, men forespørgslen virker ikke lige meget. Det betyder, at din forespørgsel ikke kunne udføres.
Hver gang en forespørgsel mislykkes, har MySQL en fejlmeddelelse, der forklarer årsagen . Desværre overføres sådanne fejl som standard ikke til PHP, og alt du har er en tavshed eller en kryptisk fejlmeddelelse nævnt ovenfor. Derfor er det meget vigtigt at konfigurere PHP og PDO til at rapportere MySQL-fejl. Og når først du får fejlmeddelelsen, vil det være let at løse problemet.
For at få de detaljerede oplysninger om problemet skal du enten sætte følgende linje i din kode lige efter tilslutning
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
(hvor $dbh
er navnet på din PDO-instansvariabel) eller - bedre - tilføj denne parameter som en forbindelsesmulighed . Derefter vil alle databasefejl blive oversat til PDO-undtagelser, som, hvis de lades alene, ville fungere som almindelige PHP-fejl.
Der er en meget lille chance for, at der i tilfælde af en specifik fejl ikke vil blive kastet en undtagelse. Hvis din query()
/prepare()
eller execute()
opkald returnerer false
men der er ingen undtagelse, tjek PDO::errorInfo()
sådan her,
trigger_error("PDO errorInfo: ".$dbh->errorInfo());
Efter at have fået fejlmeddelelsen, skal du læse og forstå den. Det lyder for indlysende, men eleverne overser ofte betydningen af fejlmeddelelsen. Men det meste af tiden forklarer det problemet ret ligetil:
- Sig, hvis der står, at en bestemt tabel ikke eksisterer, skal du kontrollere stavning, stavefejl, store og små bogstaver. Du skal også sørge for, at dit PHP-script forbinder til en korrekt database
- Eller, hvis den siger, at der er en fejl i SQL-syntaksen, så skal du undersøge din SQL. Og problemstedet er lige før forespørgselsdelen citeret i fejlmeddelelsen.
Du skal også stole fejlmeddelelsen. Hvis der står, at antallet af tokens ikke matcher antallet af bundne variabler, så er det så. Det samme gælder for fraværende tabeller eller kolonner. Givet valget, uanset om det er din egen fejl eller fejlmeddelelsen er forkert, skal du altid holde dig til førstnævnte. Igen lyder det nedladende, men hundredvis af spørgsmål på netop dette websted viser, at dette råd er yderst nyttigt.
Bemærk, at for at se PDO-fejl skal du kunne se PHP-fejl generelt. For at gøre det skal du konfigurere PHP afhænger af webstedets miljø:
-
på en udvikling server, det er meget praktisk at have fejl lige på skærmen, for hvilke visningsfejl skal være slået til:
error_reporting(E_ALL); ini_set('display_errors',1);
-
mens du er live websted, skal alle fejl logges, men aldrig vises til klienten. Til dette skal du konfigurere PHP på denne måde:
error_reporting(E_ALL); ini_set('display_errors', 0); ini_set('log_errors', 1);
Bemærk, at error_reporting
skal indstilles til E_ALL
hele tiden.
Bemærk også, at trods den almindelige vrangforestilling der skal ikke bruges nogen try-catch til fejlrapporteringen . PHP vil rapportere dig PDO fejl allerede, og på en måde bedre form. En ufanget undtagelse er meget god til udvikling, men hvis du vil vise en tilpasset fejlside, skal du stadig ikke bruge try catch til dette, men bare indstille en tilpasset fejlhåndtering . I en nøddeskal behøver du ikke at behandle PDO-fejl som noget særligt, men betragte dem som enhver anden fejl i din kode.
P.S.
Nogle gange er der ingen fejl, men heller ingen resultater. Så betyder det, der er ingen data, der matcher dine kriterier . Så du er nødt til at indrømme dette faktum, selvom du kan sværge på dataene og kriterierne er i orden. De er ikke. Du skal tjekke dem igen. Jeg har et kort svar, der vil hjælpe dig med at lokalisere matchningsproblemet, Har problemer med matchende rækker i databasen bruger BOB
. Bare følg denne instruktion og den linkede vejledning trin for trin, og få enten løst dit problem eller få et svar, der kan besvares spørgsmål til Stack Overflow.