我想要一个 MySQL 查询或表对象,比如说一个将 PDO 对象作为输入并对表执行所有必要操作的对象。
我在想这个对象可以实现一些数组接口,比如Countable
, ArrayAccess
,Iterator
所以我可以foreach
像普通数组一样轻松地处理行。
在已弃用mysql_*
的函数中,有(仍然是)非常有用的函数mysql_data_seek()
,它有助于逐行移动,因此我可以实现所有Iterator
方法。我可以在开始时运行一个查询并将行保留在某个资源私有字段中,并在需要时提供服务。
我可以通过向数据库发送适当的查询并获取结果来涵盖其他功能(主要是信息性的,mysql_list_tables()
类似的),但是我如何才能移动到特定的行?
我以为fetch()
方法的最后一个参数是光标位置,但是当我调用
$p = $database->query('SELECT * FROM tobjects');
$row = $p->fetch(PDO::FETCH_ASSOC, PDO::ATTR_CURSOR,$i);
对于 .的任何值,它总是产生相同的行$i
。
编辑
实际上,它不是同一行,而是第一次调用时的第一行fetch()
,第二行的第二行等等,就像没有游标信息一样。正如答案中所建议的,我这样做了
$p = $database->prepare('SELECT * FROM tobjects',
array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$p->execute();
$row = $p->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, $i);
但这同样有效。