fetch_obj ejemplos php pdo fetch

php - ejemplos - ¿Cómo manejar adecuadamente los errores de PDO fetch()?



pdo php pdf (2)

El documento para el manejo de errores para fetch () no está claro y no he encontrado una respuesta en ningún lado después de mucha búsqueda. Un modelo de uso común para buscar como se muestra en el documento es:

while ( $row = $stmt->fetch() ) { // do something with $row }

El documento PHP en http://www.php.net/manual/en/pdostatement.fetch.php dice:

En todos los casos, FALSE se devuelve en caso de error.

¿Qué significa "falla"? ¿Un error? ¿Falla al buscar más filas? Mi pregunta es: cuando fetch () devuelve FALSE, ¿cuál es la mejor práctica para detectar errores? Parece que después del ciclo necesito distinguir entre un caso de error y el caso de "no más filas".

¿Debo llamar a $ stmt-> errorCode () y ver si es ''00000''?


Para manejar los errores de consulta (no se producen errores sql en la recuperación) y más error de PDO general, debe intentar usar PDO::ERRMODE_EXCEPTION . Además, el PdoStatement devuelto por query() implementa Traversable, por lo que puede omitir el uso de fetch() para consultas simples:

try { $db = new PDO(''sqlite:mydb.db''); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Set Errorhandling to Exception foreach($db->query("SELECT...") as $row) { //Do domething } $db = null; // "Disconnect" } catch (PDOException $err) { //Handling query/error }

Se generará una excepción si la consulta encuentra un error (no fetch ()).

Fetch siempre devolverá false cuando llegue al final de su conjunto de resultados.


fetch () devolverá falso cuando no haya más datos para ser recuperados. También podría haber otro caso en el que realmente haya una falla, por ejemplo, que mysql haya muerto o que la conexión se haya perdido al hacer el ciclo de búsqueda. Pero en términos generales, ese tipo de falla "real" es bastante raro, y con frecuencia se obtiene "falso porque no hay más datos disponibles".

Si eres realmente paranoico sobre la escritura del manejo de errores, entonces, por supuesto, pon una verificación de código de error sql después del ciclo while para detectar los casos cuando algo realmente explotó.