2014-10-21 46 views
2

我想隨機訪問使用PDO Mysql和PHP從存儲過程重新調用的結果集。我發現PDOStatement::nextRowset,但對結果集的訪問似乎是連續的。使用PDO Mysql和PHP隨機訪問行集/結果集Mysql和PHP

編輯 我正在尋找一些這樣的:

$pdo = new PDO("mysql:host=$server;port=$port;dbname=$dbname;charset=utf8", $user, $pass, array(PDO::ATTR_PERSISTENT => false)); 
$statement = "CALL FooSP()"; 
$query = $pdo->prepare($statement); 
$query->execute(); 

$query->resultSet[1][0]["ColumnFoo"] // Second Resultset, first row, column "ColumnFoo" 
$query->resultSet[3][1]["ColumnBar"] // third Resultset, second row, columna "ColumnBar" 
$query->resultSet[0][0]["Column1"] // first Resultset, first row, columna "Column1" 

誰能幫助我?

+2

你爲什麼不隨意地命令你的查詢?防爆。 'ORDER BY RAND()' – 2014-10-21 23:34:01

+0

請參閱我的編輯 – 2014-10-21 23:57:54

+0

'$ query-> resultSet [rand(0,$ query-> rowCount()];' – 2014-10-22 00:00:14

回答

0

如果你需要的所有結果集 - 只是用next rowset這樣的預取他們:

<?php 
$sql = 'CALL multiple_rowsets()'; 
$stmt = $conn->query($sql); 
$fetched_rowsets = array(); 
do { 
    $rowset = $stmt->fetchAll(PDO::FETCH_NUM); 
    if ($rowset) 
    { 
     $fetched_rowsets[] = $rowset; 
    } 
# This is important part. 
} while ($stmt->nextRowset()); 
#Now You got the table with all data from all resultsets, fetched in PHP memory. 
$fetched_rowsets[1][0]["ColumnFoo"]; 
$fetched_rowsets[3][1]["ColumnBar"]; 
$fetched_rowsets[0][0]["Column1"]; 
?> 

只要記住,它可以消耗內存。