2012-08-05 9 views
14

Sembra che per un'istruzione INSERT, è possibile utilizzare if (isset($connect->lastInsertId())) per verificare se l'istruzione INSERT ha avuto esito positivo. (Per favore correggimi se ho torto.)Con PDO, come posso assicurarmi che una dichiarazione UPDATE abbia avuto successo?

Ma per una dichiarazione UPDATE, come posso sapere se ha avuto successo?

Per esempio, ho una base del genere:

$statement=$connect->prepare("UPDATE users SET premium='1' WHERE userid=?"); 
$statement->execute(array($id)); 

Grazie mille in anticipo. Cordiali saluti

+2

Che cosa è un'affermazione di aggiornamento di successo nei tuoi occhi? – hakre

+1

$ stmt-> rowCount() aiuto? – Nate

+0

Salve, è una dichiarazione che ha comportato la modifica di almeno un valore nella tabella. Cordiali saluti – alexx0186

risposta

14

Dipende da cosa intendi per "successo". Se si intende che la query viene eseguita senza esito negativo, allora PDO genererà un'eccezione in caso di errore o restituirà FALSE da PDOStatement::execute(), a seconda della modalità di errore impostata, quindi una query "riuscita" in tal caso sarebbe solo una in cui il il metodo execute non ha restituito FALSE o genera un'eccezione.

Se si intende "riuscito" in quanto in realtà sono state aggiornate le righe (rispetto a solo 0 righe aggiornate), è necessario verificare che utilizzando PDOStatement::rowCount(), che indicherà il numero di righe interessate dalla query precedente.

Avvertenza: per gli aggiornamenti in cui newvalue = oldvaluePDOStatement::rowCount() restituisce zero. È possibile utilizzare

$p = new PDO($dsn, $u, $p, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));

al fine di disattivare questo comportamento imprevisto.

+0

Ciao, grazie mille per questo. In realtà intendevo "più di zero riga aggiornata". Saluti – alexx0186

+0

risposta molto bello - in realtà ho bisogno la prima parte - vero/falso :) –

+3

Prestare attenzione basandosi su risultato rowCount: PDOStatement-> rowCount - Restituisce il numero di righe interessate dall'ultima istruzione SQL Se si tenta di aggiornare una riga ma i nuovi valori del campo sono uguali a quelli già memorizzati nel DB, rowCount restituirà 0 (dato che nulla è stato effettivamente aggiornato!). Ciò non significa che l'istruzione UPDATE non sia stata eseguita correttamente! –

-1
$stmt->execute(); 
$count = $stmt->rowCount(); 

if($count =='0'){ 
    echo "Failed !"; 
} 
else{ 
    echo "Success !"; 
} 
+1

Sarà meglio che tu spieghi la tua risposta, le risposte al solo codice non sono molto utili. – Arman

+0

la mia risposta riguarda UPDATE. $ sql = "UPDATE utenti SET premium = '1' WHERE userid = $ id"; $ stmt = $ dbConnection-> prepare ($ sql); $ stmt-> execute(); quindi il codice sopra ripeterà il successo o non è riuscito. –

Problemi correlati