2013-03-12 94 views
-1

我想知道如何檢查插入語句是否被執行。PDO插入如果陳述

我目前的檢查它的代碼是這樣的:

$query = $conn->prepare("INSERT INTO editlog VALUES('',:whoadd,:doing,NOW())"); 
$query-> execute(array(':whoadd' => $whoadd,':doing' => $doing)); 
if ($query->rowCount() > 0) { 
// insert statment have been excuted 
} 
else 
{ 
// something went wrong 
} 

有比使用$query->rowCount() > 0更好的辦法?我聽說rowCount()本身運行一個查詢到MySQL數據庫..所以,什麼是一個很好的選擇?

+0

首先,你已經[問這個問題2次](http://stackoverflow.com/questions/15325487/checking-if-sql-query-was-excuted-in-pdo)接下來,[你是仍然令人困惑的2個問題 - 如果查詢完全執行或者它返回任何行。](http://stackoverflow.com/a/15325557/285587)**請最後瞭解差異。** – 2013-03-13 01:29:39

回答

3

正如馬克帕內爾建議的那樣,在if聲明中包裝execute呼叫會訣竅。這可能證明是有用的後面設置你的數據庫對象的某些屬性,也:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

曹景偉PDO在情況下,查詢失敗拋出異常(PDOException)。你可以通過傳遞數組作爲第四參數到構造設置這些屬性:

$pdo = new PDO('mysql:dbname=foobar;host=127.0.0.1','your','pass', 
         array(PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
          PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ')); 

例如,here's a full list of all attributes that can be specified

1

檢查execute調用的返回值:

if ($query->execute(array(':whoadd' => $whoadd,':doing' => $doing))) { 
    // insert statment have been excuted 
} 
else 
{ 
    // something went wrong 
} 
+0

這是否只是工作在插入聲明?還是可以將它應用於選擇,刪除和更新統計信息? – shnisaka 2013-03-12 23:16:30

+1

它可以用於任何聲明,但它只會告訴你它是否成功執行。例如。它不會告訴你是否有任何行由UPDATE查詢實際更新過。 – 2013-03-12 23:20:05

+0

來檢查它是否實際更新,我需要使用'$ query-> rowCount()> 0'嗎?我還能使用什麼? – shnisaka 2013-03-12 23:22:02

0

PDOStatement對象::執行()本身將返回成功true或false失敗。