php - number - or die mysqli_error
Cómo obtener información de error de MySQLi en diferentes entornos (1)
En primer lugar, siempre ten esta línea antes de conectar MySQLi en todos tus entornos:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Después de eso, todos los errores de MySQL se transferirán a excepciones de PHP. La excepción no detectada, a su vez, genera un error fatal de PHP. Por lo tanto, en caso de un error de MySQL, obtendrá un error PHP convencional. Eso lo hará conocer al instante la causa del error. Una traza de pila lo llevará al lugar exacto donde ocurrió el error.
Tenga en cuenta que debe poder ver los errores de PHP en general . Y aquí de hecho va la cuestión de diferentes entornos:
En un sitio en vivo, tiene que echar un vistazo a los registros de errores, por lo tanto, la configuración debe ser
error_reporting(E_ALL); ini_set(''display_errors'', 0); ini_set(''log_errors'', 1);
Mientras está en un servidor de desarrollo local, está bien hacer errores en la pantalla:
error_reporting(E_ALL); ini_set(''display_errors'', 1);
Y una pequeña lista de lo que no deberías :
- Utilice el operador de supresión de errores (
@
) - Use
die()
oecho
o cualquier otra función para imprimir el mensaje de error en la pantalla incondicionalmente. PHP ya lo puede hacer eco, no se necesita ayuda. - Probar el resultado de la consulta manualmente (como
if($result)
) simplemente no tiene sentido. O bien su consulta falló y ya obtendrá la excepción de error, o bien y no hay nada que probar. - Use try..catch para hacer eco del mensaje de error. De nuevo PHP puede hacerlo mejor, mucho mejor.
En mi entorno local / de desarrollo, la consulta MySQLi está funcionando bien. Sin embargo, cuando lo cargo en mi entorno de host web, aparece este error:
Error fatal: llamada a una función miembro bind_param () en un objeto no ...
Aquí está el código:
global $mysqli;
$stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?");
$stmt->bind_param(''i'', $cur_id);
$stmt->execute();
$stmt->bind_result($uid, $desc);
Para verificar mi consulta, traté de ejecutar la consulta a través del panel de control phpMyAdmin y el resultado está bien.