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