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

回答編集履歴

3

見直し

2019/12/06 03:52

投稿

退会済みユーザー
answer CHANGED
@@ -67,4 +67,6 @@
67
67
 
68
68
  }
69
69
  ```
70
- あくまで机上のコードなので、エラー出たらごめんね。
70
+ あくまで机上のコードなので、エラー出たらごめんね。
71
+ prepareしてbindValueしてexecuteしてから、
72
+ 例えば行単位で取得するのにfetch()を使う事例のつもり。

2

加筆修正

2019/12/06 03:52

投稿

退会済みユーザー
answer CHANGED
@@ -23,4 +23,48 @@
23
23
 
24
24
  他の方の回答にあるように、カラム名称でも、0から始まる数値でも、
25
25
  カラムごとのデータにアクセスできるようになっていますので、
26
- お好きな方法をお使いください。
26
+ お好きな方法をお使いください。
27
+
28
+ ---
29
+
30
+ [PHPでデータベースに接続するときのまとめ - Qiita](https://qiita.com/mpyw/items/b00b72c5c95aac573b71)
31
+ を参考に全容を書き出すと、
32
+
33
+ ```php
34
+ try {
35
+
36
+ /* リクエストから得たスーパーグローバル変数をチェックするなどの処理 */
37
+
38
+ // データベースに接続
39
+ $pdo = new PDO(
40
+ 'mysql:dbname=testdb;host=localhost;charset=utf8mb4',
41
+ 'root',
42
+ '',
43
+ [
44
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
45
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
46
+ ]
47
+ );
48
+
49
+ /* データベースから値を取ってきたり, データを挿入したりする処理 */
50
+ $stmt = $pdo->prepare('SELECT login_id, user_name FROM accounts WHERE login_id = :id');
51
+ $stmt->bindValue(':id', $login_id, PDO::PARAM_INT);
52
+ $stmt->execute();
53
+
54
+ while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
55
+ /* 行ごとに取得したデータを出力する。表組みしたければtr,th,td要素を駆使すること。 */
56
+ echo $row['login_id'] . PHP_EOL;
57
+ echo htmlspecialchars($row['user_name'], ENT_QUOTES, 'UTF-8') . PHP_EOL;
58
+ }
59
+
60
+ } catch (PDOException $e) {
61
+
62
+ // エラーが発生した場合は「500 Internal Server Error」でテキストとして表示して終了する
63
+ // - もし手抜きしたくない場合は普通にHTMLの表示を継続する
64
+ // - ここではエラー内容を表示しているが, 実際の商用環境ではログファイルに記録して, Webブラウザには出さないほうが望ましい
65
+ header('Content-Type: text/plain; charset=UTF-8', true, 500);
66
+ exit($e->getMessage());
67
+
68
+ }
69
+ ```
70
+ あくまで机上のコードなので、エラー出たらごめんね。

1

加筆修正

2019/12/06 03:50

投稿

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