2009-12-12 13 views
9

Básicamente tengo una tabla con un par de columnas marcadas como Únicas. Tengo un script que vuelca un montón de valores en la tabla con un comando como este:CodeIgniter - ¿Continuar con el error de SQL?

$this->db->query("INSERT INTO `table` (`col1`, `col2`, `col3`) VALUES (`val1`, `val2`, `val3`)"); 

De vez en cuando mi script intentará insertar una fila que violaría la singularidad de una de las columnas. Sin embargo, en lugar de hacer que la secuencia de comandos aborte con un error en la base de datos, me gustaría que continúe, posiblemente generando un pequeño mensaje. Básicamente estoy buscando el equivalente de codeigniter de

mysql_query("INSERT blah blah blah") or print("fail"); 

¡Gracias!
Mala

+0

Ah qué pasó con la respuesta con el bloque try-catch? – Mala

Respuesta

19

Sí, me tomó un tiempo demasiado molesto y el infierno fuera de mí:

$db['default']['db_debug'] = FALSE; 

... en config/database.php - desactiva la página de error.

Después de una consulta corrió, se utiliza para comprobar si hay un error:

if (!empty($this->db->_error_message())) { 
    echo "FAIL"; 
} 
+0

Si no está vacío, ¿no? Eso me suena atrasado, o no entiendo cómo funciona el vacío()? – Mala

+0

oh lo siento, probablemente debería leer toda la línea antes de comentar eh;) ¡Muchas gracias! – Mala

+0

mi código se ve así: if (vacío ($ this-> db -> _ error_message())) \t echo "succeed"; else \t echo "fail"; pero la página falla con un "error fatal: no se puede usar el valor de retorno del método en el contexto de escritura" ... – Mala

8

sé que ya tiene una solución, pero pensamos que podría ser útil para otras personas que vieron este problema también.

Deje que la base de datos de hacer el trabajo por usted:

$this->db->query("INSERT IGNORE INTO `table` (`col1`, `col2`, `col3`) VALUES (`val1`, `val2`, `val3`)"); 

Cuando se utiliza INSERT IGNORE, cosas como errores de clave duplicados se convierten en advertencias en lugar de errores, que permiten a sus consultas se ejecutan sin interrumpir el flujo de la secuencia de comandos.

entonces usted podría hacer un

SHOW WARNINGS; 

después de que todas las consultas se han quedado para ver lo que ocurrió advertencias.

http://dev.mysql.com/doc/refman/5.1/en/insert.html

+0

¡Esa es realmente una muy buena respuesta! Voy a mantener el mío como está por ahora, pero definitivamente usaré esto en el futuro. Gracias :) – Mala

+0

Bien, de hecho prefiero esta respuesta. <3 – TFennis

+0

¡Gracias por la gran respuesta! – Iyas

Cuestiones relacionadas