PDO准备语句不返回结果


PDO prepare statement not returning results

有人可以向我解释为什么下面的函数 1 中的 prepare 语句没有返回任何结果,但函数 2 中的查询语句确实返回结果 (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的结果是:

int 0

字符串"一月"(长度 = 7)

字符串 '9' (长度 = 1)

int 12

因为在第一个函数中,实际执行语句的行是在获取行计数执行的。

尝试反转第一个查询中语句的顺序,如下所示:

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

根据文档:

PDOStatement::rowCount() 返回受 由相应的 PDOStatement object.

如果关联的 PDOStatement 执行的最后一个 SQL 语句是 一个 SELECT 语句,某些数据库可能会返回行数 由该声明返回。但是,不能保证此行为 适用于所有数据库,不应依赖可移植数据库 应用。

您可以通过调用 SELECT COUNT(*) FROM graves WHERE dod_month = 'January' AND dod_day = '9' ORDER BY dod_year DESC 来简单地查询行计数