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?

More than 3 years have passed since last update.

PDOクラスによるデータベース接続

Posted at

はじめに

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にしておきます。

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?