jme*_*zes 5 php mysql sql pdo rowcount
使用php pdo和mysql时,确定更新查询是否成功的确定方法是什么?
在我的应用程序中,我更新了提交但是用户的项目总数,表格如下所示:
项目
userId | itemsAdded | itemsChecked | itemsUnChecked | itemsTotal
1 | 5 | 2 | 3 | 5
Run Code Online (Sandbox Code Playgroud)
因此,当我这样做时update items set itemTotals = itemsChecked+itemUnChecked,itemsTotal除非itemsAdded更改并且itemsUnChecked增加(2 + 3等于5,1 + 4也是5),否则列保持不变.
我曾经使用rowCount()来检查查询是否成功,但在这种情况下,由于itemsTotal列保持不变,因此无法确定sql是否成功.
$query = $conn->prepare($sql);
$query->execute(array(
":itemCount" => $itemCount
":itemId" => $itemId
));
$queryCount = $query->rowCount();
if($queryCount == 1) {
echo 'Updated succeeded';
} else {
echo 'Updated failed!';
}
Run Code Online (Sandbox Code Playgroud)
我也可以用:
$query = $conn->prepare($sql);
$result = $query->execute(array(
":itemCount" => $itemCount
":itemId" => $itemId
));
if($result) {
echo 'Updated succeeded';
} else {
echo 'Updated failed!';
}
Run Code Online (Sandbox Code Playgroud)
但是,如果查询成功或基于更新的行数,它会返回true还是false?
我只需要检查查询是否成功.无需告知已更新的行数.
execute()当SQL语句的执行失败时,该方法将抛出异常或返回FALSE(取决于您为数据库连接设置的错误模式).
如果我们在执行语句之前(通常在建立数据库连接之后立即)将错误模式设置为抛出异常,就像这样
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Run Code Online (Sandbox Code Playgroud)
然后我们可以使用try/catch块来处理SQL语句抛出的异常.像这样的东西:
try {
$query->execute(...);
echo 'Update succeeded';
} catch(PDOException $e) {
echo 'Update failed!';
echo 'Error: ' . $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
有关错误模式设置和处理的信息,请参见以下文档:http://php.net/manual/en/pdo.error-handling.php
或者,如果PDO未设置为抛出异常,我们可以使用简单的if测试.(execute()如果语句失败,该方法将返回FALSE.)
if ($query->execute(...)) {
echo 'Update succeeded';
} else {
echo 'Update failed!';
}
Run Code Online (Sandbox Code Playgroud)
为了更精确地控制不同类型的故障,我们可以使用该errorCode()方法检索与语句句柄上的最后一个操作相关联的SQLSTATE,并且我们可以对返回的值执行条件测试.http://php.net/manual/en/pdostatement.errorcode.php
| 归档时间: |
|
| 查看次数: |
6650 次 |
| 最近记录: |