因此,令人讨厌的是,来自Microsoft的PDO_SQLSRV驱动程序在来自带有不可滚动游标的SELECT查询的任何rowCount()调用时返回-1。
进一步增加烦恼,默认光标类型是_FORWARD,这意味着我似乎必须为每个准备好的语句添加属性,我可能需要返回行数(在此应用程序中,这是很多),如下所示。这是不可接受的,因为我们将使用的一些数据库引擎不支持可滚动游标。
$pdo->prepare("SELECT x FROM y", array(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL));
奇怪的是,这似乎不适用于PDO :: query()...
修改 的 如下所示,我也尝试过PDO :: setAttribute()并将选项添加到PDO :: __ construct(),但是既没有抛出异常或错误,也没有真正做任何事情!
我的问题是:有没有办法将默认光标类型设置为CURSOR_SCROLL?
答案 0 :(得分:3)
怎么样:
$pdo->setAttribute(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL);
此外,您可以使用自己的方法扩展基础PDO类,并使用prepare
方法覆盖:
class MyPdo extends PDO
{
public function prepare($statement, $options = array())
{
if (empty($options)) $options = array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL);
return parent::prepare($statement, $options);
}
}