2012-07-25 17 views
7

Estoy insertando datos en una base de datos MySQL, en caso de que si la inserción falla, necesito dar un mensaje de error apropiado que lo indique. De acuerdo con mi código a continuación, seré Echo-ing el mensaje Inserted si la inserción fue exitosa o fallida.Inserte datos en MySql DB y visualice si la inserción es exitosa o falla

Lo que quiero hacer es hacer eco del mensaje Inserted solo cuando la inserción de datos es un éxito, y devolver fail si falla. ¿Cómo puedo modificar mi código para hacerlo?

<?php 

mysql_connect("localhost", "root", "123") or die(mysql_error()); 
mysql_select_db("swm_database") or die(mysql_error()); 

mysql_query("INSERT INTO PEOPLE (NAME) VALUES ('COLE')")or die(mysql_error()); 

echo "Inserted"; 
?> 
+0

las respuestas a continuación ya indican lo que debe hacer, pero piense en usar mysqli o PDO en lugar de las funciones mysql_ *. –

Respuesta

24
$result = mysql_query("INSERT INTO PEOPLE (NAME) VALUES ('COLE')")); 
if($result) 
{ 
echo "Success"; 

} 
else 
{ 
echo "Error"; 

} 
3

Después INSERT consulta puede utilizar ROW_COUNT() para comprobar si hay operación de inserción exitosa como:

SELECT IF(ROW_COUNT() = 1, "Insert Success", "Insert Failed") As status; 
+1

Devolver verdadero no garantiza que los datos se hayan insertado en la base de datos, ¿puedo decirlo? – Timeless

+0

sí, esta es la manera más segura ya que el retorno verdadero no funcionará en el caso de la consulta 'INSERT IGNORE'. – Omesh

1
if (mysql_query("INSERT INTO PEOPLE (NAME) VALUES ('COLE')")or die(mysql_error())) { 
    echo 'Success'; 
} else { 
    echo 'Fail'; 
} 

Aunque ya que tienes or die(mysql_error()) se mostrará el mysql_error() en la pantalla cuando falla Probablemente debería eliminar que si no es el resultado deseado

2

Según el libro PHP and MySQL for Dynamic Web Sites (4th edition)

Ejemplo:

$r = mysqli_query($dbc, $q); 

Para consultas sencillas como INSERT , ACTUALIZACIÓN, BORRAR, etc. (que no devuelven registros), $r variable-abreviatura para resultado-TRUE o FALSE, dependiendo de si la consulta se ejecutó correctamente.

Tenga en cuenta que "ejecutado correctamente" significa que se ejecutó sin error; no significa que la ejecución de la consulta necesariamente tuvo el resultado deseado; deberás probar para eso.

¿Entonces cómo probar?

Mientras que la función mysqli_num_rows() devolverá el número de filas generadas por un SELECT consulta, mysqli_affected_rows() devuelve el número de filas afectadas por una INSERT, ACTUALIZACIÓN, o DELETE consulta. Se utiliza este modo:

$num = mysqli_affected_rows($dbc); 

A diferencia de mysqli_num_rows(), el argumento de la función toma es la conexión de base de datos (DBC $), no los resultados de la consulta anterior ($ r).

Cuestiones relacionadas