Php PDO prepare语句未返回结果

Php PDO prepare语句未返回结果,php,pdo,Php,Pdo,有人能给我解释一下为什么下面的function1中的prepare语句不返回结果,而function2中的query语句却返回结果12 class Test { function function1($db) { //date_default_timezone_set('America/Chicago'); // CDT $month = "January"; //date('F'); $day = "9"; //date('j')

有人能给我解释一下为什么下面的function1中的prepare语句不返回结果,而function2中的query语句却返回结果12

class Test
{   function function1($db)
    {
        //date_default_timezone_set('America/Chicago'); // CDT
        $month = "January";  //date('F');
        $day = "9";  //date('j');
        // let's query for died today
        $stm = $db->prepare("SELECT * FROM graves WHERE dod_month = ? AND dod_day = ? ORDER BY  dod_year DESC");
        $stm->bindValue(1, $month, PDO::PARAM_STR);
        $stm->bindValue(2, $day, PDO::PARAM_STR); 
      // $stm = $db->query("SELECT * FROM graves WHERE dod_month = 'January' AND dod_day = '9' ORDER BY  dod_year DESC");
        $affected_rows = $stm->rowCount();

        $stm->execute();

        var_dump($affected_rows,$month,$day);
    }

function function2($db)
{
        //date_default_timezone_set('America/Chicago'); // CDT
        //$month = "January";  //date('F');
        //$day = "9";  //date('j');
        // let's query for died today
       // $stm = $db->prepare("SELECT * FROM graves WHERE dod_month = ? AND dod_day = ? ORDER BY  dod_year DESC");
       // $stm->bindValue(1, $month, PDO::PARAM_STR);
        //$stm->bindValue(2, $day, PDO::PARAM_STR); 
        $stm = $db->query("SELECT * FROM graves WHERE dod_month = 'January' AND dod_day = '9' ORDER BY  dod_year DESC");
        $affected_rows = $stm->rowCount();

        $stm->execute();

        var_dump($affected_rows);
    }        


}
var_dump的结果如下:

整数0

字符串“一月”长度=7

字符串“9”长度=1


int 12,因为在第一个函数中,实际执行语句的行是在获得行数后执行的。

根据文档:

PDOStatement::rowCount返回受 由相应的 PDO语句对象

如果关联的PDO语句执行的最后一条SQL语句为 对于SELECT语句,某些数据库可能返回行数 由该声明返回。然而,这种行为不能保证 适用于所有数据库,不应依赖于 应用程序


您可以通过调用SELECT count*查询行数,其中dod_MOUNT='一月'和dod_day='9'按dod_year DESC排序,尝试按如下方式颠倒第一次查询中语句的顺序:

$stm->execute();    
$affected_rows = $stm->rowCount();

它被执行了$stm->execute,但OP在execute语句之前请求受影响的行。所以它返回0。谢谢,这不是我第一次这么做。。。我知道它必须是简单的,因为类似的代码在过去曾经工作过。是的,就是这样。。。谢谢我的经验是,查询语句将在不发出execute命令的情况下返回结果,函数2中不需要execute