2014年11月11日火曜日

?日目 PHP SQL 「PDO」でデータベースへ接続する

とても眠い!!が、今日の授業メモ。


  • 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; でサーバー上のメモリを削除する。
 これをしないとずっとプールし続ける。

0 件のコメント:

コメントを投稿