きっとできるに違いないと信じて格闘し、頭も使い、Googleも使い、結局時間の無駄だったってこと、ありますよね。
いやもう毎日、大小はあってもそんなことばかりやっています。
今回も同じマスタのデータを複数のリストボックスに表示したかっただけなのに。
マスタの件数が多いので、fetchAllして全部取ってこずにfetchしようとしてスクロール可能なカーソルを使ってみました。
MySQLで。
・prepare時
1 |
$pdo->prepare($query, array(PDO::ATTR_CURSOR => \PDO::CURSOR_SCROLL)); |
・fetch時
1 2 3 4 5 6 7 |
$pdo->prepare($query, array(PDO::ATTR_CURSOR => \PDO::CURSOR_SCROLL)); $i = 0; while($row = $stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, $i){ echo "<option value='{$row["value"]}'>{$row["value"]}</option>"; $i++; } |
や、
1 2 3 4 5 |
$row = $this->branchStmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_FIRST); echo "<option value='{$row["value"]}'>{$row["value"]}</option>"; while($row = $this->branchStmt->fetch()){ echo "<option value='{$row["value"]}'>{$row["value"]}</option>"; } |
など。
他にもやった気がするけれど、もう思い出せません。
ついさっきのことだけれど。
そしてたどり着きました。
その先になにもない、地の果てに。
https://dev.mysql.com/doc/refman/5.1/en/cursors.html
「Nonscrollable: Can be traversed only in one direction and cannot skip rows」
えっ
https://bugs.php.net/bug.php?id=49017
「Unfortunately, MySQL does not support scrollable cursors.」
えっ
http://stackoverflow.com/questions/15637291/how-use-mysql-data-seek-with-pdo
・・・実はできるとか・・・いや、PDO::FETCH_ORI_*は全般に無理なんでしょう。
https://mariadb.com/kb/en/mariadb/cursor-overview/
MariDBもだめか。
地の果てでfetchAllしました。