はじめに
phpを使うエンジニアを目指す身としてしっかりphpのことを深く理解していきたい!と言うことで、これからパーフェクトphpを読んで学んだことをこれからアップしていこうと思います。
初心者がなんか頑張ってるなーと温かい目で見ていただけると幸いです。
間違って理解している点などあれば是非終えていただけると幸いです。
PDOによるデータベース接続
パphpでは以下のように接続すると書いているが、公式リファレンスによるとこの拡張モジュールは PHP 5.5.0 で非推奨となり、PHP 7.0.0.0 で削除されたとのことです。
$link=mysql_connect("localhost","root","root");
僕はバージョン8になってから始めているのでsqlごとに接続方法を変えているのを初めて見ました。(PDOクラスによってデータベースの差異をなくしているので個々の接続方法があるのは当然ですが)
バージョン7以降ではpdoを使って接続する頃を推奨されているので以下のように書きます。
try{
$db = new PDO('mysql:dbname=online_bbs; host=localhost;
charset=utf8',"root","root");
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
echo "接続成功";
}catch(PDOException $e){
echo 'DB接続エラー:'.$e->getMessage();
}
ここではpdoの動作オプションをしてするPDO::Attributeメソッドを使っている。
PDO::Attribute([オプション種別],[オプション値])
PDO::ATTR_ERRMODE
はエラーの通知方法を指定している。
デフォルト値はPDO::ERRMODE_SILENTが指定されていてこのままではエラーを出力しない(PDO::errorCodeメソッドでエラーコードのみ取得可能)今回はPDO::ERRMODE_EXCEPTIONを指定することで例外(主にPDOException)をスローする。これによって接続できた場合は例外処理をスロー(スルー)できる。例外に対応する為はtry~catchブロックを使いキャッチするようにする。PDOExceptionはExceptionクラスのサブクラスなのでExceptionとしてキャッチすることも可能。
PDO::ATTR_EMULATE_PREPARES
はプリペアートステートメントのエミュレートを指定する
デフォリトではtrueになっています。trueのままでは自動エスケープはされるものの 、SQLインジェクションの危険があるのでfalseにしておきます。