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']}です。";