PDO准备声明不返回结果

时间:2015-01-09 23:17:11

标签: php pdo

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

string' January' (长度= 7)

string' 9' (长度= 1)

int 12

3 个答案:

答案 0 :(得分:3)

因为在第一个函数中,实际执行语句的行在之后执行,你得到行数。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

根据文件:

  

PDOStatement :: rowCount()返回受影响的行数   最后由相应的DELETE,INSERT或UPDATE语句执行   PDOStatement对象。

     

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

您可以通过调用SELECT COUNT(*) FROM graves WHERE dod_month = 'January' AND dod_day = '9' ORDER BY dod_year DESC

来简单地计算行数