ejemplo - php mysql connect
PDO SQL-state "00000" pero aún error? (5)
Esta pregunta ya tiene una respuesta aquí:
- Mi declaración PDO no funciona 1 respuesta
¿Alguien puede explicar por qué?
$sql->execute($params);
devuelve FALSE
, mientras que
print $pdo->errorCode();
print_r($pdo->errorInfo());
ambos devuelven SQLSTATE
00000
, lo que significa de acuerdo con el éxito de la documentación? Es un INSERT
y no se está insertando nada en la base de datos ... entonces, ¿por qué recibo un mensaje de éxito de SQLSTATE
?
En caso de que ayude, este es el código ...
$sql = $pdo->prepare("
INSERT INTO user (
username, fname, pass, salt, email,
loc_id_home, country_id_home, region_id_home,
cont_id_home, timestamp_reg, timestamp_upd, timestamp_lastonline,
online_status, gender, birthdate
)
VALUES (
:username,:fname,:pass,:random_salt,:email,
:loc_id_home,:country_id_home,:region_id_home,
:cont_id_home,''".time()."'',''".time()."'',''".time()."'',
1,:gender,:birthdate)
");
$params=array(
'':username''=>$username,
'':fname''=>$fname,
'':pass''=>$pass,
'':random_salt''=>$random_salt,
'':email''=>$email,
'':loc_id_home''=>$loc_id_home,
'':country_id_home''=>$country,
'':region_id_home''=>$region,
'':cont_id_home''=>$continent,
'':gender''=>$gender,
'':birthdate''=>$birthdate
);
$sql->execute($params);
print $pdo->errorCode();
print_r($pdo->errorInfo());
Del manual php:
PDO :: ERR_NONE (cadena) Corresponde a SQLSTATE ''00000'', lo que significa que la instrucción SQL se emitió correctamente sin errores ni advertencias. Esta constante es para su conveniencia al verificar PDO :: errorCode () o PDOStatement :: errorCode () para determinar si ocurrió un error. Por lo general, sabrá si este es el caso al examinar el código de retorno del método que levantó la condición de error de todos modos.
Entonces parece que insertó el registro. Verifique la última identificación de registro en su mesa ... ¿tal vez se lo perdió?
Enfrenté el problema similar,
Esto ocurre varonil debido a un error en la consulta , intente ejecutar su consulta en php-myadmin o en cualquier otro corredor de consultas y confirme que su consulta está funcionando bien.
Incluso si nuestra sintaxis de consulta es correcta, otros errores simples como dejar nulo o no mentioan una columna que se establece como no nulo en la estructura de la tabla provocarán este error. (Esta fue la error que hice)
Como user1122069 explicó el motivo de $ pdo-> errorInfo () dice que nada está mal puede deberse a
$ pdo-> errorInfo () se refiere a la última declaración que se ejecutó con éxito.
Dado que $ sql-> execute () devuelve falso, entonces no puede referirse a esa declaración (ya sea a nada o a la consulta anterior)
Espera que esto ayude :)
Es porque $pdo->errorInfo()
refiere a la última declaración que se ejecutó con éxito. Como $sql->execute()
devuelve false, no puede referirse a esa declaración (ya sea a nada o a la consulta anterior).
En cuanto a por qué $sql->execute()
devuelve falso, no sé ... o bien hay un problema con su matriz $params
o con su conexión de base de datos.
PDO :: errorCode - Obtener el SQLSTATE asociado con la última operación en el manejador de la base de datos
Nota: El manual de PHP ( http://php.net/manual/en/pdo.errorinfo.php ) no define exactamente lo que significa "última operación en el manejo de la base de datos", pero si había un problema con los parámetros de enlace, eso error habría ocurrido dentro de PDO y sin ninguna interacción con la base de datos. Es seguro decir que si $pdo->execute()
devuelve true
, ese $pdo->errorInfo()
es válido. Si $pdo->execute()
devuelve false
, el comportamiento de $pdo->errorInfo()
no está explícitamente claro en la documentación. Si recuerdo correctamente desde mi experiencia, execute devuelve true
, incluso si MySQL devolvió un error, devuelve false
si no se realizó ninguna operación. Como la documentación no es específica, podría ser específica del controlador de db.
Esta respuesta refleja la experiencia práctica desde el momento de su redacción en septiembre de 2012. Como ha señalado un usuario, la documentación no reafirma explícitamente esta interpretación. También puede que solo refleje la implementación particular del controlador de la base de datos, pero siempre debería ser cierto que si $pdo->execute()
devuelve true
, ese $pdo->errorInfo()
es válido.
Es posible que también desee establecer PDO :: ERRMODE_EXCEPTION en su secuencia de conexión. El manejo de excepciones hace innecesario verificar y consultar el error.
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
Estaba recibiendo este error al mismo tiempo. Solo lo tengo en un servidor para todos los fracasos. Un servidor diferente informaría el error correctamente para los mismos errores. Eso me llevó a creer que era un error de configuración del cliente MySQL. Nunca resolví el error específico, pero verifico tus configuraciones.
Intenta comprobar $ sql por print_r () y copia tu consulta, luego prueba la consulta resultante en phpMyadmin. Hope obtendrá la razón. Habría posibilidad de valor irrelevante.