2012-04-03 17 views
24

Con la siguiente pieza de código, ¿cómo sé que se insertó algo en la base de datos?

if ($stmt = $connection->prepare("insert into table (blah) values (?)")) { 
$stmt->bind_param("s", $blah); 
$stmt->execute();   
$stmt->close();         
} 

Pensé que agregar la siguiente línea habría funcionado, pero aparentemente no.

if($stmt->affected_rows==-1){$updateAdded="N"; echo "failed";} 

y luego usar el updatedAdded $ = "N" para saltar a continuación, otras piezas de código final de la página que dependen de la inserción por encima de tener éxito.

¿Alguna idea?

+0

Wouldn 't 'affected_rows' ser 0 si no se ha insertado nada? Aunque si no se hubiera insertado nada, probablemente sería porque 'execute' había fallado. ¿Has probado 'if ($ stmt-> affected_rows <1)'? – MichaelRushton

Respuesta

49

El método devuelve un execute()boolean ... así que hacer esto:

if ($stmt->execute()) { 
    // it worked 
} else { 
    // it didn't 
} 
+0

Parece que va a funcionar, ovaciones – cosmicsafari

+0

Tomé un folleto sobre el uso de este método. busqué en Google para asegurarme, y esto me llevó a esta respuesta. upvoted para que más personas lo usen en sus scripts. – r3wt

+1

¡Esto no garantiza que una inserción haya ocurrido alguna vez! Solo que no hubo un error. – user1032531

4

Sólo echa the manual pages de cualquier función que esté utilizando:

prepare() - Devuelve un objeto de declaración o FALSO si ocurrió un error.
bind_param() - Devuelve TRUE en caso de éxito o FALSE en caso de error.
execute() - Devuelve TRUE en caso de éxito o FALSE en caso de error.
close() - Devuelve TRUE en caso de éxito o FALSE en caso de error.

16

Comprobar el valor de retorno de $ stmt-> ejecutar()

if(!$stmt->execute()) echo $stmt->error; 

Tenga en cuenta que la línea de código no realice el execute() de comandos a fin de utilizarlo en lugar de su actual $ stmt-> ejecutar() no después de eso.

3

si usted quiere decir que usted quiere saber el número de filas afectadas puede utilizar rowCount on the pdo statement

$stmt->rowCount(); 

después de ejecutar;

si se habla de manejo de errores Creo que la mejor opción es establecer el errmode a tirar exteptions y envolver todo en un bloque try/catch

try 
{ 
    //---- 
} 
catch(PDOException $e) 
{ 
    echo $e->getMessage(); 
} 
0

Otra forma:

if ($stmt->error){ 
     echo "Error"; 
    } 
    else{ 
     echo "Ok"; 
    } 
Cuestiones relacionadas