PDO准备语句不返回结果
问题描述:
有人可以向我解释为什么函数1中的prepare语句不返回结果,但函数2中的查询语句确实返回结果(12)。PDO准备语句不返回结果
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
答
因为在第一个函数中,实际执行语句的那一行是可执行的在之后你可以得到行数。
答
根据文档:
PDOStatement对象:: rowCount时()返回受 最后删除行,插入或更新语句由相应 PDOStatement对象对象所执行的数目。
如果由关联的PDOStatement执行的最后一条SQL语句是 的SELECT语句,某些数据库可能会返回该语句返回的行数 。但是,对于所有数据库,此行为不保证 ,不应依赖便携式 应用程序。
你可以通过调用SELECT COUNT(*) FROM graves WHERE dod_month = 'January' AND dod_day = '9' ORDER BY dod_year DESC
答
设法扭转在第一个查询语句的顺序如下简单QUERTY行数:
$stm->execute();
$affected_rows = $stm->rowCount();
+0
是的,这是...谢谢。我的经验是,查询语句将返回结果而不发出执行,并且在函数2中不需要执行 – Artie 2015-01-10 00:03:22
它被执行。 '$ stm-> execute()'除了OP在execute语句之前请求受影响的行之外。所以它返回0. – Mouser 2015-01-09 23:21:50
@Mouser谢谢! – GolezTrol 2015-01-09 23:25:07
谢谢,这不是我第一次这么做......知道它必须是简单的东西,因为类似的代码在过去有效。 – Artie 2015-01-09 23:56:58