データベースのデータを表示させる
-
index.php
の作成及び編集
● ユーザー入力がない場合(SQL文が決まっているパターンで毎回同じような表示をするような時)は query関数を使用 (PDOStatementクラス)
- 参考: PDOStatement
index.php
<?php
require 'db_connection.php'; // db_connection.phpの読み込み (データベースの読み込みができる)
// データベースの中身を取得するためにSQL文を書く
// ユーザー入力がない場合(SQL文が決まっているパターンで毎回同じような表示をするような時)は query関数を使用
$sql = 'select * from contacts where id = 3';
// ステートメント
$stmt = $pdo->query($sql); // sql実行される
$result = $stmt->fetchAll();
var_dump($result);
※ index.php
にアクセスしてみる
接続成功
array(1) {
[0]=>
array(8) {
["id"]=>
int(3)
["name"]=>
string(9) "いいい"
["email"]=>
string(14) "test2@test.com"
["url"]=>
string(16) "http://test2.com"
["gender"]=>
int(1)
["age"]=>
int(4)
["contact"]=>
string(12) "test2
test2"
["created_at"]=>
string(19) "2024-04-06 20:20:58"
}
}
名前付きプレースホルダ
-
ユーザー入力がある場合(検索画面だったりお問い合わせフォームなどユーザーが入力する場合) prepare, bind, execute の大きく3種類の関数を使用
-
悪意のあるユーザーが、お問い合わせフォームに delete * 文などを打ち、それが通ってしまうと問題がある。SQLインジェクション対策をする必要がある
-
index.php
を編集
index.php
<?php
require 'db_connection.php';
// : を付ける場合は名前付きプレースホルダと呼んだりする
$sql = 'select * from contacts where id = :id'; // ? を付けるか : を付ける(プレースホルダ)
$stmt = $pdo->prepare($sql); // プリペアードステートメント
// :id に実際の値を紐づける必要がある(bind)
// bindRaram と bindValue という2種類の関数がある
$stmt->bindValue('id', 2, PDO::PARAM_INT); // PDO::PARAM_INTは型の入力 id 2 が入力される(紐付け)
$stmt->execute(); // queryが実行される
$result = $stmt->fetchAll();
echo '<pre>';
var_dump($result);
echo '</pre>';
結果:
接続成功
array(1) {
[0]=>
array(8) {
["id"]=>
int(2)
["name"]=>
string(9) "あああ"
["email"]=>
string(13) "test@test.com"
["url"]=>
string(15) "http://test.com"
["gender"]=>
int(0)
["age"]=>
int(2)
["contact"]=>
string(20) "テスト
テスト"
["created_at"]=>
string(19) "2024-04-06 20:18:56"
}
}
入力で入ってくる値なので実際は 変数
で記述する