teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

コメントの返答を追加

2017/03/14 06:21

投稿

shi_ue
shi_ue

スコア4437

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

3

追記

2017/03/14 06:21

投稿

shi_ue
shi_ue

スコア4437

answer CHANGED
@@ -4,4 +4,21 @@
4
4
  foreach ( $stmt->fetchAll () as $row ) {
5
5
  ↓↓↓
6
6
  while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) {
7
- ```こんな感じ?
7
+ ```こんな感じ?
8
+
9
+ 追記
10
+ ---
11
+ よくよく読んでみると、ループである必要はないですね。
12
+ ```php
13
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
14
+ if ($row) {
15
+ $_SESSION ['customer'] = [
16
+ 'id' => $row ['id'],
17
+ 'name' => $row ['name'],
18
+ 'address' => $row ['address'],
19
+ 'login' => $row ['login'],
20
+ 'password' => $row ['password']
21
+ ];
22
+ }
23
+ ```
24
+ とこんな感じですね。まあ、同じ`login`と`password`の人が複数いる場合、最初に`fetch`した人になりますが。

2

fetchのパラメーターを追加

2017/03/14 04:12

投稿

shi_ue
shi_ue

スコア4437

answer CHANGED
@@ -3,5 +3,5 @@
3
3
  ```php
4
4
  foreach ( $stmt->fetchAll () as $row ) {
5
5
  ↓↓↓
6
- while ( $row = $stmt->fetch() ) {
6
+ while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) {
7
7
  ```こんな感じ?

1

変更

2017/03/14 04:05

投稿

shi_ue
shi_ue

スコア4437

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