- PDO(ピーディーオー)
昨今ではDBに対して"PDO"で接続することを推奨している。
クラス構造になっている??
PDO = PHP Data Object
http://php.net/manual/ja/book.pdo.php
MySQLの版権を持つメーカーオラクル。
しばらく無償でを提供すると言っているが、将来有償化することも起こりえる。
→そのとき、今まで使っていた関数 mysql~が使えなくなる?!
そこでPDOを導入。
このクラスのオブジェクトを生成すると、
宣言(接続の定義)さえすれば、
指定したDBに対して自動的に接続してくれる。
長い目で見て継続するサービスはPDOにした方がいいかも。
○特徴:セキュア
プレースホルダー
sprintfを使って個別にサニタイズしていたが(mysql_real_string...とかで)
その必要がなくなる。
○postgreSQL
(ポストグレ エスキューエル)
PCUNIX上で動作するオープンソースのデータベース
○MySQLはオラクルが版権を握ってしまった。
○つなぎ方
$dsn="mysql:dbname=foods;host=localhost"
3つのデータを入れる
使うDB名、DBネーム(goodsとか)、サーバー名(sakuraとか)
- try 例外処理
try{
&pdo=new PDO($dsn,$user,$password);
}$catch(PDOException $e){
print("接続失敗".$e->getMessage());
exit();
}
○クエリの実行もメソッド
PDOオブジェクトが持っているクエリというメソッドを使って
引数としてSQL文を渡す。
$stmt = $pdo->query("set names utf8;");
$stmt =$pdo->prepare("select * from データベース名where フィールド名1=? and フィールド名2=?");
$stmt->execute(array(2,"%テキスト%"));
while($row=$stmt->fetch(PDO::FETCH_ASSOC)){
print("<p>".$row["item_name"]."☆".$row["price"]."</p>";
}
$pdo=null;
?>
$stmt(ステートメント)
上で予約、下で値を入れる
prepare...sprintfに該当するもの。
executeメソッドで値をバインド!!(代入)
「?」に値をもたせられる。
単純にテキストが入るのではなく、コンパイルされている。
※$eというオブジェクトが持っているgetMessage()というメソッドが使える
例外を検知したときは$eというオブジェクトとして取り扱う
foreachみたいなもの。
例外が発生したら、$eというオブジェクトが持っているgetMessage()というメソッドを実行。
(PDO::FETCH_ASSOC)
突然のダブルコロン→PDOのプロパティ
アロー演算を使って呼び出してくる筋の物。
オブジェクトを生成しなくても静的に呼び出せる。
newしなくってもメソッドを呼び出せる。
$pdo=null; でサーバー上のメモリを削除する。
これをしないとずっとプールし続ける。