sql >> Databasteknik >  >> RDS >> Mysql

PDO SQL-tillstånd 00000 men fortfarande fel?

Det beror på att $pdo->errorInfo() hänvisar till det senaste uttalandet som kördes framgångsrikt. Sedan $sql->execute() returnerar false, då kan den inte referera till det påståendet (antingen till ingenting eller till frågan innan).

Om varför $sql->execute() returnerar false, jag vet inte... antingen finns det ett problem med dina $params array eller med din databasanslutning.

Obs:PHP-manualen (http://php.net/manual/en/pdo .errorinfo.php ) definierar inte exakt vad "senaste operationen på databashandtaget" betyder, men om det fanns ett problem med bindningsparametrar skulle det felet ha inträffat i PDO och utan någon interaktion med databasen. Det är säkert att säga att om $pdo->execute() returnerar true , att $pdo->errorInfo() är giltig. Om $pdo->execute() returnerar false , beteendet hos $pdo->errorInfo() framgår inte uttryckligen av dokumentationen. Om jag minns rätt från min erfarenhet returnerar exekvera true , även om MySQL returnerade ett fel, returnerar false om ingen operation gjordes. Eftersom dokumentationen inte är specifik kan den vara db-drivrutinspecifik.

Detta svar återspeglar praktiska erfarenheter när det skrevs i september 2012. Som en användare har påpekat bekräftar inte dokumentationen uttryckligen denna tolkning. Det kan också bara återspegla den specifika databasdrivrutinimplementeringen, men det bör alltid vara sant att om $pdo->execute() returnerar true , att $pdo->errorInfo() är giltigt.

Du kanske också vill ställa in PDO::ERRMODE_EXCEPTION i din anslutningssekvens. Undantagshantering gör det onödigt att kontrollera och fråga efter felet.

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );


  1. Hur man hanterar MySQL - för Oracle DBA:er

  2. Hämta gränsvärdena för en partitionerad tabell i SQL Server (T-SQL)

  3. Hur man sammanfogar flera rader i en kolumn i MySQL

  4. Oracle Infoga via Välj från flera tabeller där en tabell kanske inte har en rad