Answers:
PDOStatement->execute()
成功返回true。还有PDOStatement->errorCode()
,你可以检查错误。
if ($stmt->execute()) { //true }
PDOStatement->execute()
和PDOStatement->errorCode()
彼此完全一致?有什么情况PDOStatement->errorCode()
但PDOStatement->execute()
返回真吗?或何时PDOStatement->execute()
返回false但PDOStatement->errorCode()
什么都没有?
考虑到PDO最推荐的错误模式是ERRMODE_EXCEPTION
,直接execute()
结果验证将永远无法进行。由于代码执行甚至无法达到其他答案中提供的条件。
因此,存在三种可能的情况来处理PDO中的查询执行结果:
try..catch
运算符。对于普通的PHP用户来说,这听起来有些陌生-那是怎么回事,而不是验证操作的直接结果?-但这正是异常的工作原理-您可以在其他地方检查错误。一次就好。非常方便。
简而言之:在常规代码中,您根本不需要任何错误处理。只需按原样保留您的代码:
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!"; // whatever
如果成功,它会告诉您,如果出错,它将向您显示应用程序在这种情况下显示的常规错误页面。
仅当您有其他处理情况而不只是报告错误时,才将插入语句放在try..catch
运算符中,检查是否是您期望的错误并进行处理;或-如果错误有任何不同,则- 重新引发异常,以使站点范围的错误处理程序可以按通常方式进行处理。以下是我有关PDO错误处理的文章中的示例代码:
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
// Take some action if there is a key constraint violation, i.e. duplicate name
} else {
throw $e;
}
}
echo "Success!";
在上面的代码中,我们正在检查特定错误以采取某些措施,然后针对将报告给程序员的任何其他错误(例如没有此类表)重新抛出异常。
再说一遍-只是告诉用户“您的插入成功”之类的条件就不需要了。
query()
功能的信息吗?我可以使用try-catch query()
代替prepared()->execute()
吗?
尝试查看的返回值execute
,该值TRUE
在成功与FALSE
失败之间。
如果执行更新查询时使用与当前数据库记录匹配的值,$stmt->rowCount()
则将返回0
,不会影响任何行。如果您if( rowCount() == 1 )
要测试成功,您会认为更新没有失败但它的值已经在数据库中,所以失败了,所以没有任何变化。
$stmt->execute();
if( $stmt ) return "success";
当我尝试使用违反的唯一键字段更新记录时,这对我不起作用。该查询返回成功,但另一个查询返回旧的字段值。
if($stmt->execute() && ($stmt->rowCount()>0))
您可以测试行数
$sqlStatement->execute( ...);
if ($sqlStatement->rowCount() > 0)
{
return true;
}
SELECT
查询可能是不可靠的(甚至在那里,文档也谈到了多个查询)。它说一无所知DELETE
,INSERT
或者UPDATE
,这似乎是良好的工作(问题是关于INSERT
查询)。但是,我是PDO的新手,如果我错了,并且还有其他参考,请在此处写下。我很想看看上面的3个命令是否有真正的缺点。
使用id作为自动递增的主键
$stmt->execute();
$insertid = $conn->lastInsertId();
即使在第一个记录上,增量id始终大于零,这意味着它将始终为id coz返回大于零的true值,这意味着在PHP中为true
if ($insertid)
echo "record inserted successfully";
else
echo "record insertion failed";
PDOStatement-> execute()可以引发异常
所以你可以做的是
try
{
PDOStatement->execute();
//record inserted
}
catch(Exception $e)
{
//Some error occured. (i.e. violation of constraints)
}