Comments
Description
Transcript
PHPでのDB利用
PHP での DB 利用 1 ■PHPでのDB利用 5 .executeメ ソ ッ ド 1 .PDOと は prepareメソッドを行っても、SQL実行の準備をしただけ で、SQL自体はまだ実行されていない。SQLの実行は PDOStatementクラスの executeメソッドを使用する。 PDO=PHP Data Objects ○書式 データベースを使うためのオブジェクト MySQL、SQLiteなど複数のデータベースに対応している PHP5.1以降、標準で対応。 戻り値 = オブジェクト->execute(); 戻り値がTRUEの場合、処理が成功となる。 2 .PDOオブジェ ク ト の生成 ○書式 変数 = new PDO(データソース,ユーザ名,パスワード); データソースの書き方はデータベースによって異なる。 ○mysqlの場合のデータソース書式 mysql:dbname=データベース名 または mysql:dbname=データベース名; host=ホスト名 単純な使用例: $sql->execute(); 結果を判定する場合の例: if( $sql->execute() ){ // 成功した場合の処理 }else{ // 失敗した場合の処理 } 6 .結果の取り 出し ○オブジェクトの生成例 $db = new PDO("mysql:dbname=hanbai","root","root"); 3 .文字コ ード の指定 文字コードを正しく指定して動作させるには、queryメソ ッドを使用し、"SET NAMES utf8;" を指定する。 これをオブジェクト生成後に必ず行っておく。 例: $db = new PDO("mysql:dbname=hanbai","root","root"); $db->query("SET NAMES utf8;"); 4 .prepareメ ソ ッ ド SQLを単純に発行するには まずprepareメソッドを使用 し、SQLの準備を行う。 ○書式 executeメソッドを実行すると、そのオブジェクトから結 果を取り出すことができる。 結果を一件取り出すには fetchメソッドを使用する。 ○書式 結果 = オブジェクト->fetch(); 結果は連想配列となっており、キーは、フィールド名。 例: $data = $sql->fetch(); echo $data['sname']; echo $data['tanka']; fetchメソッドは繰り返して使うことで、次のデータを取 得できる。 例: $data1 = $sql->fetch(); $data2 = $sql->fetch(); $data3 = $sql->fetch(); // 1つ目のデータ // 2つ目のデータ // 3つ目のデータ 変数 = PDOオブジェクト->prepare(SQL文字列); 例: $sql = $db->prepare('SELECT * FROM shouhin'); 戻り値はPDOStatementクラスのオブジェクトとして返さ れる。PDOStatementクラスはSQLのステートメント=命令 を表す。このクラスを使い、SQLを実行し、結果を得る。 しかし、全データを一度に取得するには fetchAllメソ ッドが便利である。 PHP での DB 利用 2 7 .全データ の表示 1 0 .パラ メ ータ の埋め込み 全データを取得する場合 fetchAll メソッドを使う。 単純に文字列を連結し、SQLを発行する形のプログラムは セキュリティ上「SQLインジェクション」の危険がある。 ○書式 結果配列 = オブジェクト->fetchAll(); 例: $all = $sql->fetchAll(); 結果配列はfetchで取り出せる行の配列となっている。 これをforeachで一つずつ取り出すには以下のようにす る。 全てのデータを表示する例: foreach ($all as $data) { echo $data['sname']; echo $data['tanka']; } 8 .ま と め // shouhinテーブルから全データの商品名を表示 $db = new PDO("mysql:dbname=hanbai","root","root"); $db->query("SET NAMES utf8;"); これを避けるには prepareメソッドを使用する際にパラ メータ埋め込みを使用する。 1.SQL中の埋め込みたい箇所に ? と書く 例: $sql = $db->prepare( 'SELECT * FROM uriage WHERE sid = ?'); 2.埋め込み場所に入れる変数をbindValueメソッドで指 定する。 例:$sql->bindValue(1,$sid); ○bindValueの書式 オブジェクト->bindValue(番号,値); 番号:?が出てくる順番(1から) 値:埋め込みたいデータ 1 1 .パラ メ ータ ま と め // uriageテーブルから商品ID=1の商品名を表示 $sql = $db->prepare( 'SELECT * FROM shouhin'); $db = new PDO("mysql:dbname=hanbai","root","root"); $db->query("SET NAMES utf8;"); $sql->execute(); $sid = 1; $all = $sql->fetchAll(); $sql = $db->prepare('SELECT * FROM uriage WHERE sid = ?'); $sql->bindValue(1,$sid ); foreach ($all as $data) { echo $data['sname']; echo '<br>'; } $sql = null; // オブジェクトの開放 9 .パラ メ ータ の追加 例えば、入力された商品IDの売り上げを表示するとする。 この場合、イメージとしては以下のようなSQLを作成する。 $sid = $_GET['sid']; $sql = "SELECT * FROM uriage WHERE sid=$sid"; $sql = $db->prepare($sql); ただし、この方法にはセキュリティ上問題があるので、 実際には行ってはならない(次の方法を行う)。 $sql->execute(); $all = $sql->fetchAll(); foreach ($all as $data) { echo $data['suuryou']; echo '<br>'; } $sql = null; PHP での DB 利用 1 2 .データ の追加 データの追加は、INSERT文で行う。 例: $sname = 'にんじん'; $tanka = 300; $db = new PDO("mysql:dbname=hanbai","root","root"); $db->query("SET NAMES utf8;"); $sql = $db->prepare( 'INSERT INTO shouhin ( sname , tanka ) VALUES ( ? , ? ) '); $sql->bindValue( 1 , $sname ); $sql->bindValue( 2 , $tanka ); $sql->execute(); 1 3 .データ の削除 データの削除は、DELETE文で行う。 例: $sid = 10; $db = new PDO("mysql:dbname=hanbai","root","root"); $db->query("SET NAMES utf8;"); $sql = $db->prepare( 'DELETE FROM shouhin WHERE sid = ? '); $sql->bindValue( 1 , $sid ); $sql->execute(); 1 4 .データ の変更 データの変更は、UPDATE文で行う。 例: $sid = 10; $sname = 'にんじん'; $tanka = 300; $db = new PDO("mysql:dbname=hanbai","root","root"); $db->query("SET NAMES utf8;"); $sql = $db->prepare( $sql->bindValue( 1 , $sql->bindValue( 2 , $sql->bindValue( 3 , $sql->execute(); 'UPDATE shouhin SET sname=? , tanka=? WHERE sid=? '); $sname); $tanka); $sid); 3