回答編集履歴

3

誤字の訂正

2017/08/01 06:40

投稿

退会済みユーザー
test CHANGED
@@ -122,7 +122,7 @@
122
122
 
123
123
  進むことも出来るから戻ることも出来る、くらいに捉えておけば問題ないかと思います。
124
124
 
125
- (直前のレコードの値を参照するのに、わざわざDBカーソルを戻さずとも、直前のレコードの値を変数に保持するようにすればむ場合もありますし。)
125
+ (直前のレコードの値を参照するのに、わざわざDBカーソルを戻さずとも、直前のレコードの値を変数に保持するようにすればむ場合もありますし。)
126
126
 
127
127
 
128
128
 
@@ -144,7 +144,7 @@
144
144
 
145
145
  [PHP: PDOStatement::bindValue - Manual](http://php.net/manual/ja/pdostatement.bindvalue.php)
146
146
 
147
- プレースホルダー(個人的には虫食いって読んでるけど参道は特に求めてないです)の指定方法が2種類あって、
147
+ プレースホルダー(個人的には虫食いって読んでるけど賛同は特に求めてないです)の指定方法が2種類あって、
148
148
 
149
149
  単に「?」を使うケースと、可読性の高い名前付けを使うケースが有り、
150
150
 

2

加筆修正

2017/08/01 06:40

投稿

退会済みユーザー
test CHANGED
@@ -27,6 +27,94 @@
27
27
  一行処理したら「次のレコード」に移動する処理を起こして、
28
28
 
29
29
  「もうないよ」となるまで繰り返します。
30
+
31
+
32
+
33
+ [PHP: PDOStatement::fetch - Manual](http://php.net/manual/ja/pdostatement.fetch.php)
34
+
35
+ ```
36
+
37
+
38
+
39
+ <?php
40
+
41
+ function readDataForwards($dbh) {
42
+
43
+ $sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY BET';
44
+
45
+ try {
46
+
47
+ $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
48
+
49
+ $stmt->execute();
50
+
51
+ while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
52
+
53
+ $data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
54
+
55
+ print $data;
56
+
57
+ }
58
+
59
+ $stmt = null;
60
+
61
+ }
62
+
63
+ catch (PDOException $e) {
64
+
65
+ print $e->getMessage();
66
+
67
+ }
68
+
69
+ }
70
+
71
+ function readDataBackwards($dbh) {
72
+
73
+ $sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY bet';
74
+
75
+ try {
76
+
77
+ $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
78
+
79
+ $stmt->execute();
80
+
81
+ $row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);
82
+
83
+ do {
84
+
85
+ $data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
86
+
87
+ print $data;
88
+
89
+ } while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_PRIOR));
90
+
91
+ $stmt = null;
92
+
93
+ }
94
+
95
+ catch (PDOException $e) {
96
+
97
+ print $e->getMessage();
98
+
99
+ }
100
+
101
+ }
102
+
103
+
104
+
105
+ print "Reading forwards:\n";
106
+
107
+ readDataForwards($conn);
108
+
109
+
110
+
111
+ print "Reading backwards:\n";
112
+
113
+ readDataBackwards($conn);
114
+
115
+ ?>
116
+
117
+ ```
30
118
 
31
119
 
32
120
 

1

加筆修正

2017/08/01 04:01

投稿

退会済みユーザー
test CHANGED
@@ -49,3 +49,49 @@
49
49
  にあるように読みやすさを考えて定義されています。
50
50
 
51
51
  「PDO::ATTR_CURSOR」は、PDOクラスが定義するATTR_CURSORという定数って意味です。
52
+
53
+
54
+
55
+ 余談ですが、
56
+
57
+ [PHP: PDOStatement::bindValue - Manual](http://php.net/manual/ja/pdostatement.bindvalue.php)
58
+
59
+ プレースホルダー(個人的には虫食いって読んでるけど参道は特に求めてないです)の指定方法が2種類あって、
60
+
61
+ 単に「?」を使うケースと、可読性の高い名前付けを使うケースが有り、
62
+
63
+ 名前付けプレースホルダーを使うときには「:」をつけるという仕様です。
64
+
65
+ 「?」指定は簡単そうですが、クエリーを書き換えて
66
+
67
+ 例えば?が2つだったところに途中で3つ目の?が加わると厄介になるため、
68
+
69
+ 面倒でも名前付けプレースホルダーを活用すると良いです。
70
+
71
+ ```
72
+
73
+
74
+
75
+ <?php
76
+
77
+ /* バインドされた PHP 変数によってプリペアドステートメントを実行する */
78
+
79
+ $calories = 150;
80
+
81
+ $colour = 'red';
82
+
83
+ $sth = $dbh->prepare('SELECT name, colour, calories
84
+
85
+ FROM fruit
86
+
87
+ WHERE calories < :calories AND colour = :colour');
88
+
89
+ $sth->bindValue(':calories', $calories, PDO::PARAM_INT);
90
+
91
+ $sth->bindValue(':colour', $colour, PDO::PARAM_STR);
92
+
93
+ $sth->execute();
94
+
95
+ ?>
96
+
97
+ ```