sql >> Base de Datos >  >> RDS >> Mysql

Mi Declaración PDO no funciona

A veces, su código PDO produce un error como Call to a member function execute() o similar. O incluso sin ningún error, pero la consulta no funciona de todos modos. Significa que su consulta no se pudo ejecutar.

Cada vez que falla una consulta, MySQL tiene un mensaje de error que explica el motivo . Desafortunadamente, de forma predeterminada, dichos errores no se transfieren a PHP, y todo lo que tiene es un silencio o un mensaje de error críptico mencionado anteriormente. Por lo tanto, es muy importante configurar PHP y PDO para informarle errores de MySQL. Y una vez que reciba el mensaje de error, será sencillo solucionar el problema.

Para obtener información detallada sobre el problema, coloque la siguiente línea en su código justo después de conectarse

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

(donde $dbh es el nombre de su variable de instancia de PDO) o, mejor, agregue este parámetro como una opción de conexión . Después de eso, todos los errores de la base de datos se traducirán en excepciones de PDO que, si no se toman en cuenta, actuarían como errores normales de PHP.

Existe una posibilidad muy pequeña de que, en caso de algún error específico, no se produzca una excepción. Si su query() /prepare() o execute() la llamada devuelve false pero no hay excepción, verifique el PDO::errorInfo() así,

 trigger_error("PDO errorInfo: ".$dbh->errorInfo());

Después de recibir el mensaje de error, debe leerlo y comprenderlo. Suena demasiado obvio, pero los estudiantes a menudo pasan por alto el significado del mensaje de error. Sin embargo, la mayoría de las veces explica el problema de manera bastante sencilla:

  • Digamos, si dice que una tabla en particular no existe, debe verificar la ortografía, los errores tipográficos y las mayúsculas y minúsculas. También debe asegurarse de que su script PHP se conecte a una base de datos correcta
  • O bien, si dice que hay un error en la sintaxis de SQL, entonces debe examinar su SQL. Y el punto problemático está justo antes la parte de consulta citada en el mensaje de error.

También hay que confiar el mensaje de error Si dice que la cantidad de tokens no coincide con la cantidad de variables vinculadas, entonces es asi que. Lo mismo ocurre con las tablas o columnas ausentes. Dada la elección, ya sea que se trate de un error propio o que el mensaje de error sea incorrecto, apéguese siempre a lo primero. Una vez más, suena condescendiente, pero cientos de preguntas en este mismo sitio demuestran que este consejo es extremadamente útil.

Tenga en cuenta que para ver los errores de PDO, debe poder ver los errores de PHP en general. Para hacerlo, debe configurar PHP según el entorno del sitio:

  • en un desarrollo servidor, es muy útil tener errores en la pantalla, para lo cual se debe activar la visualización de errores:

    error_reporting(E_ALL);
    ini_set('display_errors',1);
    
  • durante un en vivo sitio, todos los errores tienen que ser registrados, pero nunca mostrados al cliente. Para ello configura PHP de esta forma:

    error_reporting(E_ALL);
    ini_set('display_errors', 0);
    ini_set('log_errors', 1);
    

Tenga en cuenta que error_reporting debe establecerse en E_ALL todo el tiempo.

También tenga en cuenta que, a pesar de la ilusión común, no es necesario utilizar un intento de captura para el informe de errores . PHP ya le informará de los errores de PDO, y de una forma mucho mejor. Una excepción no detectada es muy buena para el desarrollo, sin embargo, si desea mostrar una página de error personalizada, no use try catch para esto, solo configure un controlador de errores personalizado . En pocas palabras, no tiene que tratar los errores de PDO como algo especial, sino considerarlos como cualquier otro error en su código.

PD
A veces no hay error pero tampoco resultados. Entonces significa que no hay datos que coincidan con sus criterios . Así que tienes que admitir este hecho, incluso si puedes jurar que los datos y los criterios son correctos. No son. Tienes que revisarlos de nuevo. Tengo una respuesta breve que lo ayudaría a identificar el problema de coincidencia, Tengo un problema con las filas coincidentes en la base de datos usando DOP . Simplemente siga estas instrucciones y el tutorial vinculado paso a paso y resuelva su problema o tenga una pregunta que pueda responderse para Stack Overflow.