Php 如何检索使用PDO删除的行数?

Php 如何检索使用PDO删除的行数?,php,mysql,pdo,Php,Mysql,Pdo,好的,我一直在为我正在进行的一个项目使用一个,我试图找出删除查询是否成功。以下是我正在使用的代码: /** * A pretty straight-forward query to delete a row from the verification * table where user_id is $user_id and code is $code */ $result = $this->database->query("DELETE FROM verification " .

好的,我一直在为我正在进行的一个项目使用一个,我试图找出删除查询是否成功。以下是我正在使用的代码:

/**
* A pretty straight-forward query to delete a row from the verification
* table where user_id is $user_id and code is $code
*/
$result = $this->database->query("DELETE FROM verification " .
                                 "WHERE user_id = %u AND code = %s",
                                 $user_id,
                                 $code);

/**
 * This function will grab the PDO's exec() return, which should
 * return the number of rows modified.
 */
if($this->database->getNumAffected($result) > 0)
    return true;
else
    return false;
问题是,无论删除查询是否实际删除一行,$this->database->getNumAffected($result)始终返回“0”

您可以签出包装器,但基本上$this->database->getNumaInfected($result)只返回与PDO::exec()返回的值完全相同的值

我在没有包装器的情况下尝试了这段代码(直接到PDO中),但遇到了同样的问题:它总是返回“1”(无论行是否被删除)

任何帮助都将不胜感激


编辑:基于这样的问题,我做的一切都是对的。。。我不明白这为什么不起作用。

它没有像您预期的那样起作用,因为您正在使用的“包装器”从未使用过PDO::exec()-它将所有内容都包装在PDO语句中。根据从您提供的URL快速阅读“database”类2.2.6版的源代码,“query”方法应返回一个包含语句句柄的数组:

$query = $this->database->prepare("DELETE FROM verification WHERE user_id = :user_id AND code = :code", array('user_id' => $user_id, 'code' => $code));
$query->execute();

if ($query->rowCount() > 0) {
  return TRUE;
}
return FALSE;
502 $statement = $this -> getDatabaseConnection () -> prepare ( $query );
...
587 $ret = array ( $statement, func_get_args (), $lastIndex );
588     
589 return ( $ret );
因此,假设您的
$this->database->query()
正在调用这个数据库类的
query
方法,您应该能够执行
$result[0]->rowCount()


请注意,您对前面响应的断言“由于rowCount()函数存在错误,[您]使用的包装器使用了不同版本的rowCount()”不是真的-包装器实现了numRows,但这与,它在从
database::query()

Hmm返回的语句句柄中是完整的,我使用的包装器使用了不同版本的rowCount(),因为rowCount()函数存在错误。包装器中的numRows()只是执行一个SELECT COUNT(*)查询,因此这对包装器不起作用。我不确定它不使用exec()是什么意思,按Ctrl+F并键入execute(.感谢您的回答。我的意思是它不使用PDO::exec(),而是使用PDOStatement::execute(),这是一件完全不同的事情。转到php.net/pdo,了解pdo对象(及其“exec()”方法)和PDOStatement对象(及其“execute()”方法)之间的区别可能会很有用.这里有一些非常关键的区别。啊,好吧,这是有道理的。非常感谢你的回答,我将对此进行研究。我对PDO了解不多,就像我开始学习它时一样(这是由制作此包装的人提出的)我立即得到了一个包装器来代替它。我看到的包装器的唯一优点是,您必须键入变量,因此,如果它的类型错误(例如,当它应该是整数时为字符串),它将返回一个错误。哦,我的第一个评论是这样说的:我知道numRows()与rowCount()非常不同,由于numRows()的工作方式,我不使用它。