昔PHPの学習をしていた時、PHPとデータベースの色々なDB接続方法を調べたのでそれを纒めました。 かなり古い実装方法も記載してある為、万一この記事を参考にする場合は、非推奨と書かれていない方法で実装することをオススメします。
mysql_connect関数を使う(非推奨)
公式サイトによると、mysql_connect
は PHP5.5.0で非推奨になり、PHP 7.0.0で削除されています。
よほど古いサイトの改修などに関わる時以外は使う事はまず無いでしょう。
他にもほとんどのmysql関数が非推奨または削除となっています。
// DBへ接続 $link = mysql_connect('localhost', 'user_name', 'password'); if(!$link){ die("データベースの接続に失敗しました"); } // データベースの選択 $db_selected = mysql_select_db('db_name' , $link); if(!db_selected){ die("データベースの選択に失敗しました"); } // クエリの実行 $query = "SELECT * FROM TABLE_NAME"; $result = mysql_query($query); // 表示処理 while($row = mysql_fetch_assoc($result)){ echo $row["name"]; } // 接続を閉じる mysql_close($link);
使用関数
mysqli関数(オブジェクト指向)
mysql_connect
が削除されたのでその代替方法として用意されているのがmysqli
関数です。
mysqli
関数はオブジェクト指向
と手続き型
の2パターンでの実装が可能です。これはmysql_connect
からの移行を配慮して後方互換の為に残しておいたものらしいので、基本的にはオブジェクト指向の方で実装すれば良いかと思います。
// DBへ接続 $mysqli = new mysqli('localhost', user_name, password, db_name); if (mysqli_connect_error()){ die("データベースの接続に失敗しました"); } // クエリの実行 $query = "SELECT * FROM TABLE_NAME"; $stmt = $mysqli->prepare($query); $stmt->execute(); // プリペアドステートメントに変数をバインドする $stmt->bind_result($name, $email); // 表示 while($stmt->fetch()){ echo $name; echo $email; } // 接続を閉じる $mysqli->close();
使用関数一覧
- mysqli()
- mysqli_connect_error()
- prepare()
- execute()
- bind_result()
- fetch()
- close()
mysqli関数(手続き型)
// DBへ接続 $link = mysqli_connect('localhost', user_name, password, db_name); if(!$link){ die("データベースの接続に失敗しました"); } // クエリの実行 $query = "SELECT * FROM TABLE_NAME"; $stmt = mysqli_prepare($link, $query); mysqli_stmt_execute($stmt); // プリペアドステートメントに変数をバインドする mysqli_stmt_bind_result($stmt, $name, $email); // 表示 while(mysqli_stmt_fetch($stmt)){ echo $name; echo $email; } // ステートメントを閉じる mysqli_stmt_close($stmt); // 接続を閉じる mysqli_close($link);
使用関数一覧
- mysqli_connect()
- mysqli_prepare()
- mysqli_stmt_execute()
- mysqli_stmt_bind_result()
- mysqli_stmt_close()
- mysqli_close()
PDOを使用する
PDOとはPHP Data Objects
の略で、PHPからデータベースのアクセスを抽象化してくれるものです。PDOで実装したソースコードはmysql
に依存しないので、他のデータベースに移行する場合も比較的容易になります。
特に理由が無ければPDOで実装すると良いかと思います。
$dsn = 'mysql:dbname=db_name;host=localhost'; $user = 'user_name'; $password = 'password'; // DBへ接続 try{ $dbh = new PDO($dsn, $user, $password); // クエリの実行 $query = "SELECT * FROM TABLE_NAME"; $stmt = $dbh->query($query); // 表示処理 while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ echo $row["name"]; } }catch(PDOException $e){ print("データベースの接続に失敗しました".$e->getMessage()); die(); } // 接続を閉じる $dbh = null;
サンプルソースにあるquery
はSQLを一行だけ実行する場合に使用します。
複数行まとめて実行する場合はexec
を使用します。
PDO::exec()
は複数行まとめて実行でPDO::query()
一行実行です。
使用関数一覧
- query()
- fetch()
- die()
まとめ
以前調べた時もmysql_connectは非推奨だったけど、いつの間にか完全に削除されてしまってました。 今はPDOを使用するのがベターな選択かと思いますが、その時の主流に合わせて最適な実装方法選択する必要があると思いました。