LoginSignup
0
4

More than 3 years have passed since last update.

[PHP]PDOでDBへ接続する時に便利なクラス

Posted at

PHP開発をしていると、絶対にデータベースに接続することは一度はあるはずです。今回はそんなDBへの接続をお手軽にするメソッドを紹介します。

PDOとは

PDOとは、PHP Data Objectの略称で、ナウいPHPではこのクラスを使ってデータベースに接続しています。PDOを正しく使っていればある程度SQLインジェクション対策にもなるため、セキュリティ観点からもWEB上に公開するアプリケーションはこのPDOを使うことが推奨されます(多分)。

DBへの接続を簡素にするコード

setting.php
define("DEV", $_SERVER['SERVER_NAME'] === "localhost" ? true : false); //開発環境か否か
$_ = function(string $str): string{return $str;}; //ヒアドキュメント用

class Connect
{
    //三項演算子を使って開発環境と本番環境でDSNを出し分ける
    const HOST = DEV ? "localhost" : "xxx.example.net";
    const USER = DEV ? "root" : "server_admin_name";
    const PASS = DEV ? "root" : "server_password";
    const UTF = "utf8";

    public function __construct($dbName)
    {
        global $_;
        $dsn = "mysql:dbname={$dbName};host={$_(self::HOST)};charset={$_(self::UTF)}";
        try{
          $pdo = new PDO($dsn, self::USER, self::PASS, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES {$_(self::UTF)}"]);
        }catch(Exception $e){
          echo "Connection Error";
          die();
        }
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        $this->dbh = $pdo;
    }
}

実際に接続して、値を取得するときは以下のようにする

$con = new Connect("database_name");
$pdo = $con->dbh;
//プリペアドステートメントなしで値を取得する
$stmt = $pdo->query("SELECT id, name FROM TABLE1;");
while($item = $stmt->fetch(PDO::FETCH_ASSOC)){
    echo "id:{$item['id']} name:{$item['name']}";
}

//IDが$xのnameを取得する場合
$stmt = $pdo->prepare("SELECT name FROM TABLE1 WHERE id = ? LIMIT 1;");
$stmt->execute([$x]);
$item = $stmt->fetch(PDO::FETCH_ASSOC);
echo "idが{$x}のnameは{$item['name']}です。";
0
4
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
4