如何在PDO中使用mysql_data_seek?

时间:2013-03-26 12:38:39

标签: mysql pdo

我想在谷歌搜索中使用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一样(更改光标)。可能吗?我喜欢所有的技巧但不是我想要的。

4 个答案:

答案 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个元素作为对象,几乎不需要额外的开销计算。