try query error consulta conexion codes catch php mysqli

php - query - Convertir errores de consulta en Excepciones en MySQLi



php mysqli error catch (3)

¿Debo verificar si mysqli_query () devolvió false?

No.

Debería poder hacer lo que necesita e indicar al controlador mysqli que MYSQLI_REPORT_ERROR excepciones en los errores de SQL, pero deberá habilitar MYSQLI_REPORT_ERROR si aún no lo está ...

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)

mysqli_query() debería ahora lanzar excepciones en caso de error. No es necesario que compruebe el valor de retorno en caso de error (que no ocurrirá de todos modos porque se lanza una excepción).

public function mysqlQuery($SQL) { try { $this->Result = mysqli_query($this->DBlink, $SQL); } catch (mysqli_sql_exception $e) { throw new MySQLiQueryException($SQL, $e->getMessage(), $e->getCode()); } return $this->Result; }

(NB: Cambié $this->SQL a $SQL en la excepción relanzada).

Estoy intentando convertir los errores de consulta de MySQLi en Excepciones, pero no pude: mysqli_sql_exception solo se lanza si no se pudo conectar la base de datos.

mysqli_report(MYSQLI_REPORT_STRICT) y funciones de MySQLi de procedimiento incrustadas en la clase contenedora personalizada.

Código anterior:

public function mysqlQuery($SQL) { $this->Result = mysqli_query($this->DBlink, $SQL); if($this->Result === false) throw new MySQLiQueryException($SQL, mysqli_error($this->DBlink), mysqli_errno($this->DBlink)); return $this->Result; }

Pregunta: ¿Es normal que no se genere ninguna Advertencia, ni Excepción cuando la consulta falla, así que tengo que verificar si mysqli_query () devolvió el valor falso?


Sé que es un poco tarde, pero por el bien de la posteridad. Encuentro que MYSQLI_REPORT_STRICT es restrictivo, ciertas excepciones no se plantearon y, por lo tanto, no pudieron ser manejadas por el bloque catch.

mysqli_report(MYSQLI_REPORT_ALL); // Traps all mysqli error try { $mysqli = new mysqli(''localhost'',''user,''pwd'',''db''); /* I don''t need to explicitly throw an exception as this is being done automatically */ } catch(Exception $e) { echo $e->getMessage(); }


Hace un tiempo logré resolver este asunto. Como se señaló en la otra respuesta ,

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

es una forma correcta de decirle a mysqli lanzar excepciones.

Sin embargo, si está envolviendo las funciones de mysqli en su propio contenedor (¡como deberían hacerlo todos!), No hace mucha diferencia. De cualquier forma, deberá agregar un código para verificar el éxito, ya sea if se trata de catch . Sin embargo, habrá un número muy limitado de llamadas, por lo tanto, no causaría demasiados problemas.

Pero todas estas personas que se están "moviendo" de mysql a mysqli debido a toda la locura del movimiento (pero dejando el enfoque igual y teniendo funciones de mysqli en todo el código), se beneficiarán de este ajuste dramáticamente (si no siguen el el hábito común de envolver todas las llamadas de función en try-catch, lo que sería inútil).