2012-04-03 53 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"; 
    } 
相关问题