0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PDO プリペアードステートメント プレースホルダ

Last updated at Posted at 2024-04-07

データベースのデータを表示させる

  • index.phpの作成及び編集

ユーザー入力がない場合(SQL文が決まっているパターンで毎回同じような表示をするような時)は query関数を使用 (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"
  }
}

入力で入ってくる値なので実際は 変数 で記述する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?