PHP PDO rowCount()返回错误结果 [英] Php PDO rowCount() return wrong result

查看:51
本文介绍了PHP PDO rowCount()返回错误结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我具有获取树状结构数据中的路径的功能.

I have a function for getting path in a tree structure data.

根据数据库中的表,当我查询sub_id='root_id'

According to my table in DB, root should get no result when I query sub_id='root_id'

当我刚通过根时,rowCount返回正确的结果,即0.但是,当我从较低等级(3rd)传递节点时,在递归末尾为root的情况下,rowCount返回1?

When I just pass the root the rowCount return correct result which is 0. However when I pass a node from lower rank(3rd), in the end of the recursive which is root, rowCount return 1?

PS

我将Mysql用作数据库

I use Mysql as DB

这是我的桌子

main_id | sub_id
----------------    
    1   |    2    
    1   |    3    
    2   |    4    
    3   |    5

代码:

$stmt = $conn->prepare("Select * from table where sub_id= ? ");  

function get_path($stmt,$node,&$map){

    $res=$stmt->execute(array($node));

    if(!$res){ throw new Exception( implode(' ',$stmt->errorInfo()),1); }

        echo $node.' found '.$stmt->rowCount().'<br>';

        if($stmt->rowCount()==0){ //root
            $map[]=$node;
        }else{

            foreach($stmt->fetchAll(PDO::FETCH_ASSOC) AS $row){
                $map[]=$node;
                $upper_node=$row['main_id'];
                get_path($stmt,$upper_node,$map);
        }
    }

}

如果我只是通过get_path($stmt,1,$map);(根)

输出:

1 found 0

但是当我例如将4传递给它时 输出变为:

but when I for example pass 4 into it the output become:

4 found 1
2 found 1
1 found 1 <= it should found 0

为什么?

推荐答案

您不应该依赖PDOStatement :: rowCount()获取受SELECT语句影响的行数,请参见

You shouldn't rely on PDOStatement::rowCount() to get the number of rows affected by a SELECT statement, see PHP manual, PDOStatement::rowCount:

DOStatement :: rowCount()返回受以下内容影响的行数: 相应的命令执行的最后一个DELETE,INSERT或UPDATE语句 PDOStatement对象.

DOStatement::rowCount() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement executed by the corresponding PDOStatement object.

如果关联的PDOStatement执行的最后一条SQL语句是 SELECT语句,某些数据库可能返回行数 该语句返回的值.但是,不能保证此行为 用于所有数据库,不应该依赖于便携式 应用程序.

If the last SQL statement executed by the associated PDOStatement was a SELECT statement, some databases may return the number of rows returned by that statement. However, this behaviour is not guaranteed for all databases and should not be relied on for portable applications.

[...]

示例#2对SELECT语句返回的行进行计数

Example #2 Counting rows returned by a SELECT statement

对于大多数数据库,PDOStatement :: rowCount()不会返回 SELECT语句影响的行数.相反,使用 PDO :: query()发出具有相同内容的SELECT COUNT(*)语句 谓词作为您想要的SELECT语句,然后使用 PDOStatement :: fetchColumn()检索将要行数 被退回.然后,您的应用程序可以执行正确的操作.

For most databases, PDOStatement::rowCount() does not return the number of rows affected by a SELECT statement. Instead, use PDO::query() to issue a SELECT COUNT(*) statement with the same predicates as your intended SELECT statement, then use PDOStatement::fetchColumn() to retrieve the number of rows that will be returned. Your application can then perform the correct action.

这篇关于PHP PDO rowCount()返回错误结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆