Chr*_*ris 87 php mysql database pdo
我正在使用PDO插入记录(mysql和php)
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)
有没有办法知道它是否成功插入,例如,如果没有插入记录,因为它是重复的?
编辑:当然我可以查看数据库,但我的意思是程序化反馈.
Óla*_*age 125
PDOStatement->execute()成功时返回true.还有PDOStatement->errorCode(),你可以检查错误.
You*_*nse 23
不知道为什么还没有正确答案.
鉴于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
Run Code Online (Sandbox Code Playgroud)
成功后它会告诉你,如果出错,它会显示你的应用程序为这种场合显示的常规错误页面.
只有在你有一个处理方案而不仅仅是报告错误的情况下,将你的insert语句放在一个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!";
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我们检查特定错误以采取某些操作并重新抛出任何其他错误(例如,没有这样的表)的异常,这将报告给程序员.
同样 - 只是告诉用户类似"你的插入成功"的东西,不需要任何条件.
小智 9
如果更新查询使用与当前数据库记录匹配的值执行,$stmt->rowCount()则将返回,0因为没有行受到影响.如果您if( rowCount() == 1 )要测试成功,您会认为更新失败但没有失败,但值已经在数据库中,因此没有任何变化.
$stmt->execute();
if( $stmt ) return "success";
Run Code Online (Sandbox Code Playgroud)
当我尝试使用违反的唯一键字段更新记录时,这对我不起作用.查询返回成功,但另一个查询返回旧字段值.
您可以测试行数
$sqlStatement->execute( ...);
if ($sqlStatement->rowCount() > 0)
{
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100195 次 |
| 最近记录: |