statement fatal error code php pdo

fatal - php pdo error mode



¿Mensaje de error de PDO? (4)

Del manual:

Si el servidor de base de datos prepara con éxito la instrucción, PDO :: prepare () devuelve un objeto PDOStatement. Si el servidor de la base de datos no puede preparar la declaración correctamente, PDO :: prepare () devuelve FALSE o emite PDOException (dependiendo del manejo de errores).

La instrucción de preparación probablemente causó un error porque la base de datos no podría preparar la declaración. Pruebe a detectar un error inmediatamente después de preparar su consulta y antes de ejecutarla.

$qry = '' INSERT INTO non-existant-table (id, score) SELECT id, 40 FROM another-non-existant-table WHERE description LIKE "%:search_string%" AND available = "yes" ON DUPLICATE KEY UPDATE score = score + 40 ''; $sth = $this->pdo->prepare($qry); print_r($this->pdo->errorInfo());

Esta pregunta ya tiene una respuesta aquí:

Aquí hay un fragmento de mi código:

$qry = '' INSERT INTO non-existant-table (id, score) SELECT id, 40 FROM another-non-existant-table WHERE description LIKE "%:search_string%" AND available = "yes" ON DUPLICATE KEY UPDATE score = score + 40 ''; $sth = $this->pdo->prepare($qry); $sth->execute($data); print_r($this->pdo->errorInfo());

Esto debería darme un error porque las tablas ni siquiera existen. Sin embargo, todo lo que obtengo es esto:

Matriz ([0] => 00000)

¿Cómo puedo obtener una mejor descripción del error para poder solucionar el problema?


Pruebe esto en su lugar:

print_r($sth->errorInfo());

EDITAR:

Agregue esto antes de su preparación:

$this->pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );

Esto cambiará el tipo de informe de error de PDO y hará que emita una advertencia cada vez que haya un error de PDO. Debería ayudarlo a rastrearlo, aunque su errorInfo debería haberse establecido.


Tal vez esta publicación sea demasiado antigua, pero puede ser útil como sugerencia para alguien que esté mirando esto: en lugar de usar:

print_r($this->pdo->errorInfo());

Use la función PHP implode ():

echo ''Error occurred:''.implode(":",$this->pdo->errorInfo());

Esto debería imprimir el código de error, la información detallada de error, etc. que normalmente obtendría si estuviera usando alguna interfaz de usuario SQL.

Espero eso ayude


Viejo hilo, pero tal vez mi respuesta ayudará a alguien. Lo resolví ejecutando primero la consulta, luego estableciendo una variable de errores, y luego comprobando si esa matriz variable de errores está vacía. ver ejemplo simplificado:

$field1 = ''foo''; $field2 = ''bar''; $insert_QUERY = $db->prepare("INSERT INTO table bogus(field1, field2) VALUES (:field1, :field2)"); $insert_QUERY->bindParam('':field1'', $field1); $insert_QUERY->bindParam('':field2'', $field2); $insert_QUERY->execute(); $databaseErrors = $insert_QUERY->errorInfo(); if( !empty($databaseErrors) ){ $errorInfo = print_r($databaseErrors, true); # true flag returns val rather than print $errorLogMsg = "error info: $errorInfo"; # do what you wish with this var, write to log file etc... /* $errorLogMsg will return something like: error info: Array( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''table bogus(field1, field2) VALUES (''bar'', NULL)'' at line 1 ) */ } else { # no SQL errors. }