回答編集履歴

3

見直し

2019/12/06 03:52

投稿

退会済みユーザー
test CHANGED
@@ -137,3 +137,7 @@
137
137
  ```
138
138
 
139
139
  あくまで机上のコードなので、エラー出たらごめんね。
140
+
141
+ prepareしてbindValueしてexecuteしてから、
142
+
143
+ 例えば行単位で取得するのにfetch()を使う事例のつもり。

2

加筆修正

2019/12/06 03:52

投稿

退会済みユーザー
test CHANGED
@@ -49,3 +49,91 @@
49
49
  カラムごとのデータにアクセスできるようになっていますので、
50
50
 
51
51
  お好きな方法をお使いください。
52
+
53
+
54
+
55
+ ---
56
+
57
+
58
+
59
+ [PHPでデータベースに接続するときのまとめ - Qiita](https://qiita.com/mpyw/items/b00b72c5c95aac573b71)
60
+
61
+ を参考に全容を書き出すと、
62
+
63
+
64
+
65
+ ```php
66
+
67
+ try {
68
+
69
+
70
+
71
+ /* リクエストから得たスーパーグローバル変数をチェックするなどの処理 */
72
+
73
+
74
+
75
+ // データベースに接続
76
+
77
+ $pdo = new PDO(
78
+
79
+ 'mysql:dbname=testdb;host=localhost;charset=utf8mb4',
80
+
81
+ 'root',
82
+
83
+ '',
84
+
85
+ [
86
+
87
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
88
+
89
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
90
+
91
+ ]
92
+
93
+ );
94
+
95
+
96
+
97
+ /* データベースから値を取ってきたり, データを挿入したりする処理 */
98
+
99
+ $stmt = $pdo->prepare('SELECT login_id, user_name FROM accounts WHERE login_id = :id');
100
+
101
+ $stmt->bindValue(':id', $login_id, PDO::PARAM_INT);
102
+
103
+ $stmt->execute();
104
+
105
+
106
+
107
+ while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
108
+
109
+ /* 行ごとに取得したデータを出力する。表組みしたければtr,th,td要素を駆使すること。 */
110
+
111
+ echo $row['login_id'] . PHP_EOL;
112
+
113
+ echo htmlspecialchars($row['user_name'], ENT_QUOTES, 'UTF-8') . PHP_EOL;
114
+
115
+ }
116
+
117
+
118
+
119
+ } catch (PDOException $e) {
120
+
121
+
122
+
123
+ // エラーが発生した場合は「500 Internal Server Error」でテキストとして表示して終了する
124
+
125
+ // - もし手抜きしたくない場合は普通にHTMLの表示を継続する
126
+
127
+ // - ここではエラー内容を表示しているが, 実際の商用環境ではログファイルに記録して, Webブラウザには出さないほうが望ましい
128
+
129
+ header('Content-Type: text/plain; charset=UTF-8', true, 500);
130
+
131
+ exit($e->getMessage());
132
+
133
+
134
+
135
+ }
136
+
137
+ ```
138
+
139
+ あくまで机上のコードなので、エラー出たらごめんね。

1

加筆修正

2019/12/06 03:50

投稿

退会済みユーザー
test CHANGED
@@ -5,3 +5,47 @@
5
5
  [var_export](https://www.php.net/manual/ja/function.var-export.php)()を使えば、
6
6
 
7
7
  phpでの文法通り出力されるので、ある意味わかりやすくなります。
8
+
9
+
10
+
11
+ ---
12
+
13
+
14
+
15
+ > 0=>arrayの意味が分からない
16
+
17
+
18
+
19
+ 配列の値として、配列を持っている状態です。
20
+
21
+ つまり、配列の、配列。
22
+
23
+ (二次元配列ではありません、あくまで、配列を抱える配列です。)
24
+
25
+
26
+
27
+ > なぜlogin_idとuser_nameの他に0=>と1=>があるのか
28
+
29
+
30
+
31
+ fetchAll()でデータ取得したのかなと察しますが、
32
+
33
+ 説明上、仮に`$rows = $stmt->fetchAll();`などとしたものとすると、
34
+
35
+ `$rows[0]`や`$rows[1]`などでレコード単位(行単位)のデータにアクセスでき、
36
+
37
+ その行が持つデータにアクセスするために
38
+
39
+ `$rows[0]['login_id']`や`$rows[0]['user_name']`で、
40
+
41
+ あるいは`$rows[0][0]`や`$rows[0][1]`でレコード内のカラムにアクセスできる構造です。
42
+
43
+ クエリー実行したときのSELECT文の書き方次第です。
44
+
45
+
46
+
47
+ 他の方の回答にあるように、カラム名称でも、0から始まる数値でも、
48
+
49
+ カラムごとのデータにアクセスできるようになっていますので、
50
+
51
+ お好きな方法をお使いください。