php – 如何检索用PDO删除的行数?

前端之家收集整理的这篇文章主要介绍了php – 如何检索用PDO删除的行数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好的,所以我一直在使用 PDO wrapper来处理我正在进行的项目,我正在试图找出DELETE查询是否成功.这是我正在使用的代码
/**
* 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;

问题是,DELETE查询是否实际删除了一行,$this-> database-> getNumAffected($result)始终返回’0′.

你可以查看包装器,但基本上$this-> database-> getNumAffected($result)只返回PDO :: exec()返回的完全相同的值.

我尝试了没有包装器的代码(直接进入PDO),我遇到了同样的问题,但反过来了:它总是返回’1′(是否删除了一行.)

任何帮助将不胜感激.

编辑:基于this问题,我正在做的一切……我不明白为什么这不起作用.

它没有按预期工作,因为你正在使用的’包装器’不会使用PDO :: exec() – 它将所有内容包装在PDO语句中.根据您提供的URL快速阅读’database’类的2.2.6版源代码,’query’方法应该返回一个包含语句句柄的数组:
502 $statement = $this -> getDatabaseConnection () -> prepare ( $query );
...
587 $ret = array ( $statement,func_get_args (),$lastIndex );
588     
589 return ( $ret );

因此,假设您的$this-> database-> query()正在调用数据库类的查询方法,您应该能够执行$result [0] – > rowCount().

请注意,您对早期响应的断言“由于rowCount()函数存在的错误而导致[您正在使用的包装器使用不同版本的rowCount()”不正确 – 包装器实现了numRows,但是这与PDOStatement::rowCount()不同,它在database :: query()返回的语句句柄内是完整的.

猜你在找的PHP相关文章