2013-03-12 92 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失败。