PHP me da error… ¿y ahora?

Cuando estás comenzando con php es muy común encontrarte ante alguna situación similar a esta:

«por algun motivo no puedo insertar datos ni actualizar ni borrar.
Me da un error en las lineas 51 y 52″

«estoy queriendo insertar un string en una base de datos pero me da error, no me reconoce el formato de la hora»

«estoy haciendo un select php con un where, pero no me muestra los resultados, me da error

Seguramente te estarás preguntando qué puede estar pasando (y más importante: ¿¿cómo resolverlo??)

Hay pocas cosas más desesperantes que probar y probar y que nada funcione…

Te tengo buenas noticias: la solución está más cerca de lo que parece 🙂

Lo primero que hay que hacer en una situación como esta es respirar hondo, tal vez dar una pequeña vuelta alrededor del escritorio y volver con la cabeza más fresca.

Una vez pasada la desesperación tenés que comprender algo fundamental:

No todos los errores son iguales

Con esto quiero decir que «me da error» ayuda muy poco cuando se trata de encontrar una solución.

Es como cuando vas al médico: si todo lo que el profesional sabe es que te duele la cabeza es difícil que te pueda curar.

Es necesario investigar un poco.

Cómo encontrar la causa del error

Lo primero que necesitás es comprender exactamente cuál es el error.

Usualmente, cuando un programa no completa su ejecución, en algún lado (La pantalla o algún archivo de log) se guarda información de qué fue lo que sucedió.

Los mensajes pueden parecer un poco crípticos (especialmente si no sabés inglés), pero si les prestás atención notarás que son muy informativos.

Veamos algunos ejemplos:

Fatal error: Uncaught Error: Call to undefined function sqlsrv_query()

Aquí el intérprete está indicando que se está tratando de realizar una llamada a una función que nunca fué definida: sqlsrv_query.

Esto te da una pista sobre lo que está sucediendo: la función sqlsrv_query pertenece a la extensión SQLSRV.

Como el resto de las extensiones, puede ser habilitada o deshabilitada en la configuración de PHP (el famoso archivo php.ini).

Así que una posibilidad es que la librería no esté instalada y/o habilitada.


Otro ejemplo:

Notice: Undefined variable: ejecutar in C:\wamp\www\demo\php\insertar.php on line 19

Acá lo que está diciendo el intérprete está diciendo dos cosas:

  1. Que hay un problema en la línea 19
  2. Que se está tratando de usar una variable que no está definida.

En PHP las variables no se definen en forma explícita… ¿entonces?

Sin ver el código completo puedo inferir que en la línea 19 se está intentando usar esa variable en algo como:

if ( $ejecutar == 'algo' ) ...

Otro detalle interesante para notar es que el mensaje comienza con Notice (A diferencia del anterior que empezaba con Fatal Error).

PHP tiene diferentes niveles de errores, algunos más graves que otros.

Según el tipo específico del error se disparará (o no) alguna acción, como por ejemplo finalizar la ejecución del script ante la detección del error.


Un último ejemplo:

Catchable fatal error: Object of class DateTime could not be converted to string

Aquí lo que está sucediendo es que se está tratando de usar un objeto de tipo DateTime en el contexto de un string… y la clase DateTime no tiene un método __toString.

Un código que podría dar este problema es:

<?php

echo 'Hoy es '.(new DateTime()).'!';
Cerca del 80% de los errores se pueden comprender simplemente leyendo el mensaje. Clic para tuitear

Qué hacer cuando el mensaje de error no alcanza

¿Qué podés hacer si el mensaje de error no es suficiente?

Bueno… sí, es una opción, pero tal vez exista alguna mejor 🙂

A veces sucede que encontrar la causa de un error requiere algo más que simplemente leer el código.

Esto sucede, por ejemplo, cuando el programa falla… a veces

Tomemos un código como este:

<?php

$a = rand(1,3);

switch ($a) {
case 1:
        echo 'Hoy es: '.(new DateTime());
        break;
case 2:
        echo $a;
case 3:
        echo $a * 2;
}

echo PHP_EOL;

Estadísticamente este programa debería fallar una de cada 3 veces que es ejecutado.

¿Cuándo? Cada vez que $a == 1.

Y ¿cómo podés saber cuánto vale $a en cada ejecución?

Pues existen diferentes opciones:

Pero la realidad es que la mejor alternativa es no usar ninguna de ellas, si no más bien un debugger.

Qué es un debugger

Un debugger es un programa que te permite ejecutar tu código paso-a-paso.

Es decir, en lugar de correr el programa entero y, recién entonces, ver la salida y tratar de entender qué valor tenía cada variable al momento de la ejecución, con el debugger podés ver el contenido de tus variables in-situ.

Los más populares para PHP son

Si querés conocer más sobre cómo usar un debugger en tus aplicaciones podés seguir leyendo acá.

mchojrin

Un pensamiento en “PHP me da error… ¿y ahora?

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: