sql >> Database teknologi >  >> RDS >> Mysql

PDO SQL-tilstand 00000 men stadig fejl?

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 );


  1. Hvad er forskellen mellem varchar og varchar2 i Oracle?

  2. Hvad hvis jeg sletter ibdata1 i mysql (LINUX)

  3. Indeks (nulbaseret) skal være større end eller lig med nul

  4. Entity Framework Indsættelse af indledende data ved genopbygning