Het is omdat $pdo->errorInfo()
verwijst naar de laatste instructie die met succes is uitgevoerd. Sinds $sql->execute()
geeft false terug, dan kan het niet naar die instructie verwijzen (noch naar niets, noch naar de query ervoor).
Waarom $sql->execute()
geeft false terug, ik weet het niet... of er is een probleem met uw $params
array of met uw databaseverbinding.
Opmerking:de PHP-handleiding (http://php.net/manual/en/pdo .errorinfo.php
) definieert niet precies wat "laatste bewerking op de database-handle" betekent, maar als er een probleem was met bindingsparameters, zou die fout binnen PDO zijn opgetreden en zonder enige interactie met de database. Het is veilig om te zeggen dat als $pdo->execute()
retourneert true
, dat $pdo->errorInfo()
is geldig. If $pdo->execute()
retourneert false
, het gedrag van $pdo->errorInfo()
blijkt niet expliciet uit de documentatie. Als ik het me uit mijn ervaring goed herinner, voer dan de return true
uit , zelfs als MySQL een fout retourneerde, retourneert false
als er geen operatie is uitgevoerd. Aangezien de documentatie niet specifiek is, kan het db-stuurprogramma specifiek zijn.
Dit antwoord weerspiegelt praktische ervaring vanaf het moment dat het in september 2012 werd geschreven. Zoals een gebruiker heeft opgemerkt, bevestigt de documentatie deze interpretatie niet expliciet. Het kan ook zijn dat het alleen de specifieke implementatie van het databasestuurprogramma weerspiegelt, maar het moet altijd zo zijn dat als $pdo->execute()
retourneert true
, dat $pdo->errorInfo()
is geldig.
Misschien wilt u ook PDO::ERRMODE_EXCEPTION . instellen in uw verbindingsvolgorde. Het afhandelen van uitzonderingen maakt het niet nodig om de fout te controleren en op te vragen.
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );