我想在谷歌搜索中使用mysql_data_seek与PDO我发现它应该是这样的:
$row0 = $result->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, 0);
然而,这不起作用,我做错了什么?
这是我的代码:
$query = "SELECT name,age FROM users";
$q = $db->prepare($query);
$q->execute();
$q->setFetchMode(PDO::FETCH_ASSOC);
$arrayData = $q->fetchAll();
foreach ($arrayData as $row){
echo $row['name'] ." ";
echo $row['age'] ."<br>";
}
$result = $q->fetch(PDO::FETCH_OBJ,PDO::FETCH_ORI_ABS,4);
var_dump($result);
我只想从上次运行查询中获取对象形式的第5行。我不想再次运行此查询(正如一些人告诉我的)我只想从sql缓冲区得到结果。
var_dump结果为:bool(false)
任何想法?
编辑:
感谢您的回答并抱歉,但也许我也不解释自己。我喜欢JSON的技巧但重点是第5行是示例。我只想使用PDO缓冲区中的查询结果,就像我在常规mysql中使用mysql_data_seek一样(更改光标)。可能吗?我喜欢所有的技巧但不是我想要的。
答案 0 :(得分:8)
PDO'游标'默认为 PDO :: CURSOR_FWDONLY ,这意味着游标不能像mysql_data_seek一样回到零,以允许游标返回零,必须定义使用'可滚动游标'
示例:
$db->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
之前使用它:
$row0 = $result->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, 0);
答案 1 :(得分:2)
$result = $arrayData[4];
就是你所需要的一切。
答案 2 :(得分:1)
如果你想要第5行结果,你可以这样做:
$result = json_decode(json_encode($arrayData[4]), FALSE);
var_dump($result);
或类似的东西:
$object = new stdClass();
foreach ($array as $key => $value)
{
$object->$key = $value;
}
好奇!为什么你需要对象形式?
编辑(这将给出第5行的对象形式):
$index = 0;
$fifthRow = new stdClass();
while($row = $q->fetch())
{
if($index++==4)
$fifthRow = json_decode(json_encode($row), FALSE);
}
答案 3 :(得分:1)
你可以这样做:
$c = 1;
$saved=null;
while($row = $q->fetch()){
if($c==4){
$saved = clone $row;
};
$c++;
somethingelse;
}
$ saved将包含第4个元素作为对象,几乎不需要额外的开销计算。