2012-04-03 51 views
24

用下面這段代碼,我怎麼知道任何東西都被插入到數據庫中?

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

我曾經想過加入下面這行會有效,但顯然不是。

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

然後使用$ updatedAdded =「N」到然後跳過其他的代碼段進一步向下依賴於上述插入件成功的頁面。

任何想法?

+0

止跌如果沒有插入任何內容,'t'affected_rows'是0?儘管如果沒有插入任何內容,它可能是因爲執行失敗。你有沒有試過'if($ stmt-> affected_rows <1)'? – MichaelRushton 2012-04-03 11:02:06

回答

49

execute()方法返回一個boolean ...所以只是這樣做:

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

這看起來好像會起作用,歡呼聲 – cosmicsafari 2012-04-03 11:36:02

+0

我花了一個使用這種方法的飛行員。我用Google進行確認,並且讓我回答這個問題。 upvoted讓更多的人將他們的腳本中使用它。 – r3wt 2014-03-30 17:09:57

+1

這並不能確保發生插入事件!只有那個沒有錯誤。 – user1032531 2016-02-09 20:11:14

4

只是檢查的the manual pages任何功能使用的是:

準備() - 返回一個語句對象或如果發生錯誤,則返回FALSE。
bind_param() - 成功返回TRUE或失敗時返回FALSE。
execute() - 成功返回TRUE或失敗時返回FALSE。
close() - 成功返回TRUE或失敗時返回FALSE。

16

檢查的$ stmt->的返回值的execute()

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

注意的代碼行不執行的execute()命令,所以用它來代替當前的$ stmt->執行()沒有在它之後。

3

如果你的意思是你想知道受影響的行數,你可以使用rowCount on the pdo statement

$stmt->rowCount(); 

後執行;

如果你正在談論的錯誤處理我認爲最好的辦法是將errmode設置爲投擲exteptions並在try/catch塊包裹一切

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

其他方式:

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