2013-03-26 10 views
9

voglio usare mysql_data_seek DOP da parte di Google di ricerca ho trovato che dovrebbe assomiglia a questo:come si usa mysql_data_seek con PDO?

$row0 = $result->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, 0); 

tuttavia non è un lavoro, che cosa ho fatto di sbagliato? questo è il mio codice:

$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); 

voglio solo ottenere il 5 ° fila in formato oggetto dall'ultima interrogazione corsa. Non voglio eseguire nuovamente questa query (come mi hanno detto alcuni ragazzi), voglio solo i risultati del buffer sql.

il risultato var_dump è: bool (false)

tutte le idee?

EDIT:

grazie per le vostre risposte e scusate ma forse io non spiego pure. Mi piace il trucco con JSON, ma il punto è che la quinta riga è un esempio. Voglio solo usare il risultato della query dal buffer con PDO esattamente come l'ho fatto con mysql_data_seek in mysql regolare (cambiare il cursore). È possibile? Mi piacciono tutti i trucchi ma non quello che cerco.

+1

http://www.php.net/manual/en/pdostatement.fetch.php#1052 77 – CBroe

+2

perché non usare? $ result = $ arrayData [4]; – jerjer

+1

2 motivi: 1. Lo voglio nel modulo oggetto, 2. cosa succede se ho un sacco di righe e non voglio salvarli in variabile (solo riga per riga) usare while ($ row = $ q- > fetch())? – Dennis

risposta

8

il 'cursore' predefinito DOP è PDO :: CURSOR_FWDONLY che significa che cursore non può a zero come accade con mysql_data_seek per consentire cursore a zero necessario definire uso 'cursore scorrevole'

esempio:

$db->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)); 

prima dell'uso in questo modo:

$row0 = $result->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, 0); 
+0

La ricerca non funziona con mysql + PDO. [bug report] (https://bugs.php.net/bug.php?id=63466) – mpen

1

Se si desidera che il 5 ° risultato di fila si può fare in questo modo:

$result = json_decode(json_encode($arrayData[4]), FALSE); 
var_dump($result); 

o qualcosa di simile:

$object = new stdClass(); 
foreach ($array as $key => $value) 
{ 
    $object->$key = $value; 
} 

Solo curioso! perché hai bisogno del modulo oggetto?

EDIT (questo darà la forma oggetto del 5 ° fila):

$index = 0; 
$fifthRow = new stdClass(); 
while($row = $q->fetch()) 
{ 
    if($index++==4) 
     $fifthRow = json_decode(json_encode($row), FALSE); 
} 
+1

Non vedo assolutamente il senso nel nostro primo codepart e penso che tu abbia capito male la sua parola "objectform" ... – ITroubs

+1

Che genio. Ora hai rubato il mio codice, lo hai inserito nella tua risposta e hai appena completato la riga $ con json_decode (json_encode ($ row)) ... – ITroubs

+0

grazie per la risposta ma non è quello che cerco .. guarda il settore dell'editor nel mio domanda per favore, mi spiego meglio (penso). – Dennis

1

Si potrebbe fare così:

$c = 1; 
$saved=null; 
while($row = $q->fetch()){ 
    if($c==4){ 
     $saved = clone $row; 
    }; 
    $c++; 
    somethingelse; 
} 

$ salvato conterrà quindi il 4 ° elemento come un oggetto con quasi nessun calcolo aggiuntivo in testa.

+1

grazie per la risposta ma non è quello che cerco. Spiego meglio di me stesso, per favore controlla il settore di modifica nella mia domanda. – Dennis

1
$result = $arrayData[4]; 

è tutto ciò che serve.