2012-04-03 4 views
24

Con il seguente codice, come faccio a sapere che è stato inserito qualcosa nel db?

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

Avevo pensato di aggiungere la seguente riga avrebbe funzionato ma apparentemente no.

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

e quindi utilizzare il $ updatedAdded = "N" per poi saltare altri pezzi di codice, più in basso nella pagina che dipendono l'inserto sopra avere successo.

Qualche idea?

+0

Wouldn 'wrong_rows' è 0 se non è stato inserito nulla? Anche se se non fosse stato inserito nulla sarebbe presumibilmente dovuto al fatto che "esegui" aveva fallito. Hai provato 'if ($ stmt-> affected_rows <1)'? – MichaelRushton

risposta

49

Il metodo restituisce un execute()boolean ... quindi basta fare questo:

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

Sembra che funzionerà, acclamazioni – cosmicsafari

+0

ho preso un volantino sull'utilizzo di questo metodo. ho cercato su Google per essere sicuro, e mi ha portato a questa risposta. ha generato un aumento di voti in modo che più persone lo usino nei loro script. – r3wt

+1

Ciò non garantisce che un inserto sia mai accaduto! Solo che non c'era un errore. – user1032531

4

Basta controllare the manual pages di qualsiasi funzione che si sta utilizzando:

preparare() - restituisce un oggetto o di dichiarazione FALSE se si è verificato un errore.
bind_param() - Restituisce TRUE in caso di successo o FALSE in caso di errore.
execute() - Restituisce TRUE in caso di successo o FALSE in caso di errore.
close() - Restituisce TRUE in caso di successo o FALSE in caso di errore.

16

Controllare il valore di ritorno di $ stmt-> execute()

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

Nota quella linea di codice non esegue la execute() di comando in modo da utilizzare al posto del tuo attuale $ stmt-> execute() non dopo.

3

se si intende che si desidera conoscere il numero di righe interessate è possibile utilizzare rowCount on the pdo statement

$stmt->rowCount(); 

dopo eseguire;

se si parla di gestione degli errori Credo che l'opzione migliore è quella di impostare l'errmode a gettare exteptions e avvolgere tutto in un blocco try/catch

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

Altro modo:

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