php - PDO 执行返回 1 但没有行受影响?

标签 php mysql class pdo

我在使用我的 PDO 删除方法时遇到了一些奇怪的行为,我希望得到一些原因的答案。出于某种原因,当我执行删除(在本例中表为空)时,查询返回 1。根据文档,如果没有修改任何行,它应该返回 0。这是代码。

protected function dsn() {
    return 'mysql:host=' . $this->host . ';dbname=' . $this->db . ';charset=' . $this->charset;
}

//my PDO attribute options//
protected $options = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        ];
//I have separate connections for different queries with different permissions
depending on what I need to do//
protected function connectDelete() {
    $dsn = $this->dsn();
    $this->pdo = new PDO($dsn, $this->userDelete, $this->passDelete, $options);

    return $this->pdo;
}

function deleteQuery($query, $values = []) {

    $prepare = $this->connectDelete()->prepare($query);
    $result = $prepare->execute($values);

    return $result;
}

所有相关代码都已准备就绪,下面是查询。

require_once $root.'/classes/userDB.php';
$db = new userDB();

$query = "DELETE FROM table WHERE primaryKey = ? AND user_id = ?";
$values = [$pk_id,$user_id];
$result = $db->deleteQuery($query, $values);

echo $result;
returns 1

我做错了什么吗?

编辑#1:
所以我尝试了 rowCount() 看看结果会是什么,我得到了以下错误。

Fatal error: Call to a member function rowCount() on a non-object...

看来查询失败了?

编辑#2:
这是将返回受影响的行的新函数。

function deleteQuery($query, $values = []) {

    $prepare = $this->connectDelete()->prepare($query);
    $prepare->execute($values);
    $result = $prepare->rowCount();

    return $result;
}

最佳答案

PDOStatement::execute

Returns TRUE on success or FALSE on failure.

true 输出为字符串变为 1。这并没有说明有多少行被删除,只是查询成功了(即语法正确并且执行时没有错误)。如果您想知道有多少行受到影响,您正在寻找 rowCount .

关于php - PDO 执行返回 1 但没有行受影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28512173/

相关文章:

javascript - 使用 eval 动态执行带有外部 src 属性的 <script> 标签

php - MySQL连接多个表错误

php - 在mysql中获取记录 "Jone Deo"或 "Deo Jone"

php - php mysql 查询中的当前行 ID 或行号

php - 为什么 Laravel API 在 POST 和 PUT 方法上返回 419 状态码?

mysql - 将相关 mysql 子查询转换为非相关

python - 实例化 Python 对象,并使用列表

python - 将 super 与类方法一起使用

java - 如何从 Java 中的另一个类获取类的特定实例?

php - 将 xml 字符串逐字转储到 mysql 数据库