2012-04-03 7 views
24

W poniższym kodzie, jak mogę wiedzieć, że coś zostało wstawione do db?

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

Myślałem, że dodanie następnej linii by zadziałało, ale najwyraźniej nie.

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

a następnie użyć $ updatedAdded = „n”, aby następnie przejść inne fragmenty kodu dalej w dół strony, które są zależne od powyższego wkładki może zakończyć się sukcesem.

Wszelkie pomysły?

+0

Wouldn "t" affected_rows' ma wartość 0, jeśli nic nie zostało wstawione? Chociaż nic nie zostało wstawione, to prawdopodobnie dlatego, że 'execute' zawiódł. Czy próbowałeś 'if ($ stmt-> affected_rows <1)'? – MichaelRushton

Odpowiedz

49

Sposób execute() zwraca boolean ... więc po prostu to zrobić:

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

Wygląda na to, że zadziała, okrzyki – cosmicsafari

+0

Wziąłem lotnika przy użyciu tej metody. szukałem go, aby się upewnić, i to doprowadziło mnie do tej odpowiedzi. przegłosowane, aby więcej osób użyło tego w swoich skryptach. – r3wt

+1

Nie gwarantuje to, że wstawka kiedykolwiek się wydarzyła! Tyle tylko, że nie było błędu. – user1032531

4

Wystarczy sprawdzić the manual pages czegokolwiek funkcja używasz:

przygotować() - zwraca obiekt oświadczenie lub FALSE, jeśli wystąpił błąd.
bind_param() - Zwraca TRUE w przypadku sukcesu lub FALSE w przypadku niepowodzenia.
execute() - Zwraca TRUE w przypadku sukcesu lub FALSE w przypadku niepowodzenia.
close() - Zwraca TRUE w przypadku sukcesu lub FALSE w przypadku niepowodzenia.

16

Sprawdź wartość zwracana $ stmt-> execute()

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

Zauważ, że linia kodu wykonuje execute() Polecenie więc używać go zamiast aktualna $ stmt-> execute() nie po tym.

3

czy to znaczy, że chcesz znać liczbę wierszy można użyć rowCount on the pdo statement

$stmt->rowCount(); 

po wykonać;

jeśli mówimy o obsługę błędów Myślę, że najlepszym rozwiązaniem jest ustawienie errmode do rzucania exteptions i zawija wszystko w bloku try/catch

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

inny sposób:

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