Det er fordi $pdo->errorInfo()
henviser til den sidste erklæring, der blev udført. Siden $sql->execute()
returnerer falsk, så kan den ikke henvise til det udsagn (enten til ingenting eller til forespørgslen før).
Med hensyn til hvorfor $sql->execute()
returnerer falsk, jeg ved det ikke... enten er der et problem med dine $params
array eller med din databaseforbindelse.
Bemærk:PHP-manualen (http://php.net/manual/en/pdo .errorinfo.php
) definerer ikke nøjagtigt, hvad "sidste operation på databasehåndtaget" betyder, men hvis der var et problem med bindingsparametre, ville den fejl være opstået inde i PDO og uden interaktion med databasen. Det er sikkert at sige, at hvis $pdo->execute()
returnerer true
, at $pdo->errorInfo()
er gyldig. Hvis $pdo->execute()
returnerer false
, adfærden for $pdo->errorInfo()
fremgår ikke eksplicit af dokumentationen. Hvis jeg husker rigtigt fra min erfaring, udfør returnerer true
, selvom MySQL returnerede en fejl, returnerer false
hvis der ikke blev foretaget nogen operation. Da dokumentationen ikke er specifik, kan den være db-driverspecifik.
Dette svar afspejler praktiske erfaringer fra det tidspunkt, det blev skrevet i september 2012. Som en bruger har påpeget, bekræfter dokumentationen ikke eksplicit denne fortolkning. Det kan også kun afspejle den særlige databasedriverimplementering, men det bør altid være sandt, at hvis $pdo->execute()
returnerer true
, at $pdo->errorInfo()
er gyldig.
Du vil måske også indstille PDO::ERRMODE_EXCEPTION i din forbindelsessekvens. Undtagelseshåndtering gør det unødvendigt at kontrollere og forespørge om fejlen.
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );