有人可以向我解释为什么下面的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
答案 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