回答編集履歴

4

コメントの返答を追加

2017/03/14 06:21

投稿

shi_ue
shi_ue

スコア4437

test CHANGED
@@ -11,6 +11,32 @@
11
11
  while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) {
12
12
 
13
13
  ```こんな感じ?
14
+
15
+
16
+
17
+ コメントに答えます
18
+
19
+ ---
20
+
21
+ マニュアルの[代入演算子](http://php.net/manual/ja/language.operators.assignment.php)のところにはこんな例題が載ってます。
22
+
23
+ ```php
24
+
25
+ <?php
26
+
27
+ $a = ($b = 4) + 5; // $a は 9 に等しくなり、$b には 4 が代入されます
28
+
29
+ ?>
30
+
31
+ ```つまり、`($b = 4)`と書くとその部分は`4`だとみなされる訳です。
32
+
33
+
34
+
35
+ よって、`($row = $stmt->fetch(PDO::FETCH_ASSOC))`と書くと、`$stmt->fetch(PDO::FETCH_ASSOC)`の結果がwhileの評価式となります。そして$rowにも`$stmt->fetch(PDO::FETCH_ASSOC)`の結果が入るということになります。
36
+
37
+
38
+
39
+ そして、`fetch`が失敗すると、`false`を返しますので、ループが終了する訳です。
14
40
 
15
41
 
16
42
 

3

追記

2017/03/14 06:21

投稿

shi_ue
shi_ue

スコア4437

test CHANGED
@@ -11,3 +11,37 @@
11
11
  while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) {
12
12
 
13
13
  ```こんな感じ?
14
+
15
+
16
+
17
+ 追記
18
+
19
+ ---
20
+
21
+ よくよく読んでみると、ループである必要はないですね。
22
+
23
+ ```php
24
+
25
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
26
+
27
+ if ($row) {
28
+
29
+ $_SESSION ['customer'] = [
30
+
31
+ 'id' => $row ['id'],
32
+
33
+ 'name' => $row ['name'],
34
+
35
+ 'address' => $row ['address'],
36
+
37
+ 'login' => $row ['login'],
38
+
39
+ 'password' => $row ['password']
40
+
41
+ ];
42
+
43
+ }
44
+
45
+ ```
46
+
47
+ とこんな感じですね。まあ、同じ`login`と`password`の人が複数いる場合、最初に`fetch`した人になりますが。

2

fetchのパラメーターを追加

2017/03/14 04:12

投稿

shi_ue
shi_ue

スコア4437

test CHANGED
@@ -8,6 +8,6 @@
8
8
 
9
9
  ↓↓↓
10
10
 
11
- while ( $row = $stmt->fetch() ) {
11
+ while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) {
12
12
 
13
13
  ```こんな感じ?

1

変更

2017/03/14 04:05

投稿

shi_ue
shi_ue

スコア4437

test CHANGED
@@ -1,3 +1,7 @@
1
+ なんか、ループの中がツッコミどころがありすぎますが、
2
+
3
+ 表題の回答だけだとすると、
4
+
1
5
  ```php
2
6
 
3
7
  foreach ( $stmt->fetchAll () as $row ) {
@@ -6,4 +10,4 @@
6
10
 
7
11
  while ( $row = $stmt->fetch() ) {
8
12
 
9
- ```
13
+ ```こんな感じ?