Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO,错误的更新仍然没有例外_Php_Mysql_Pdo_Sql Update - Fatal编程技术网

Php PDO,错误的更新仍然没有例外

Php PDO,错误的更新仍然没有例外,php,mysql,pdo,sql-update,Php,Mysql,Pdo,Sql Update,该句子更新由KEYWORDNAME和DOCUMENT\u ID标识的给定行。 我发送了一个错误的关键字名称(不存在),但存在文档id 它不应该为找不到记录抛出异常并回滚操作吗? 它总是成功并返回true(我还看到var_转储) PS:这是代码的最后一部分。否,当WHERE条件不匹配时,您只是在更新0行。更新、选择等。0行不是错误,这些是正常的数据库操作 检查以查看更新了多少行,并相应地进行处理。就数据库(以及PDO)而言,这不是一个错误。您执行了update语句,它成功地更新了0行 如果要将此作

该句子更新由
KEYWORDNAME
DOCUMENT\u ID
标识的给定行。 我发送了一个错误的关键字名称(不存在),但存在文档id

它不应该为找不到记录抛出异常并回滚操作吗? 它总是成功并返回true(我还看到var_转储)


PS:这是代码的最后一部分。

否,当
WHERE
条件不匹配时,您只是在更新
0
行。更新、选择等。
0
行不是错误,这些是正常的数据库操作

检查以查看更新了多少行,并相应地进行处理。

就数据库(以及PDO)而言,这不是一个错误。您执行了update语句,它成功地更新了0行

如果要将此作为错误处理,则必须手动执行:

try {
     $query = 'UPDATE keywords SET value = :keyvalue WHERE keyword = :keyname AND document_id = :docId';
     $pdo   = _openConnection();
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     $pdo->beginTransaction();
     $pdoStatement = $pdo->prepare($query);
     foreach ($keywords as $keyname => $keyval) {
        $pdoStatement->bindParam(':docId', $id, PDO::PARAM_STR);
        $pdoStatement->bindParam(':keyname', $keyname, PDO::PARAM_STR);
        $pdoStatement->bindParam(':keyvalue', $keyval, PDO::PARAM_STR);
        $pdoStatement->execute();
     }
     $res = $pdo->commit();
     var_dump('retornando true', $res);
     return true;
} catch (PDOException $e) {
     $pdo->rollBack();
     echo $e->getMessage();
     return false;
}

不匹配任何记录的查询不是错误。它只是一个空的结果集,这是一个完全有效的结果


您从查询中得到异常的唯一时间是查询本身、到数据库的连接等是否存在实际问题。。。e、 g.数据库中的语法错误、连接失败、正在访问的任何表的权限被拒绝等等。

为什么您认为它应该引发异常?查询尝试更新未找到的值,我在这里看不到“异常”情况。如果外键约束在更新中失败,则它的可能副本将引发异常。也许不是最好的方法,但这是一个选择。我明白了。。。如果我需要在这里抛出错误,您将如何管理它?是否先检查行?@Jorge用于查看上一次操作中受影响的行数。如果计数为0,则抛出一个错误…@Jorge我看到您更新的问题的答案已经发布:-)@jeroen是否应该有一种方法来区分没有匹配值的
0
结果和输入列名不正确的
0
结果?(例如,甚至不存在的列)@veich不存在的列名会导致无效查询,并引发异常。
$res = $pdo->commit();
if ($pdo->rowCount() == 0) {
    # some exception treatment
}