こういう記事を書く度に今時の人たちはSQLなんて書かないんだろうなぁとか思いながら書いてます。
さて、PHPでMySQLをいじる場合には、PDOという物を使います。次に紹介するページを見るとより詳しく書いてあるので、詳しい話が見たい人はそこを見てください。
まぁ色々書いてありますが、とりあえず色んなデータベースに対して、コネクションストリングさえ渡してあげれば同じインターフェースで扱えるDB用の機能といったところでしょうか。実際の使い方を見て行きます。
データベースの情報が無いと話が進められないので、仮にデータベース情報が以下であるとします。
- 使用DB: mysql
- データベース名: company
- DBのあるホスト: localhost
- ユーザ名: user
- パスワード: password
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// PDOのオブジェクトをnewする // データベースとホスト情報を一緒にしたコネクションストリング $connectionString = "mysql:dbname=company;host=localhost"; // ユーザ名 $user = "user"; // パスワード $pass = "password"; // コネクションをオープンする try{ $pdo = new PDO($connectionString, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET 'utf8'") ); } catch (PDOException $e){ die($e->getMessage()); } |
これで、companyデータベースへ接続が出来ます。次に、このpdoオブジェクトを用いてSQLを発行してみましょう。ここではcompanyに存在するdeptテーブルから情報を引き出す事にします。
1 2 3 |
$sql = "select * from dept"; $stmt = $pdo->prepare($sql); $stmt->execute(); |
このようにしてSQL文を発行する事が出来ます。また、JavaのPreparedStatement的な使い方も出来るので、例えばidが1番のものを取ってきたいときはこんな感じで書く事もできます。
1 2 3 4 |
$sql = "select * from dept where id=:id"; $stmt = $pdo->prepare($sql); $stmt->bindParam(":id", $id, PDO::PARAM_INT); $stmt->execute(); |
bindParam関数で変数をバインドします。あ、確かこの時、bindParam関数内で、バインドする値には変数以外使えないことに注意します。例えば、こういう書き方すると、できない。
1 |
$stmt->bindParam(":id", $id + 5, PDO::PARAM_INT); |
はい。そしたら結果を見てみましょう。こうやって見ます。
1 2 3 4 5 6 |
$deptList = null; while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ $id = $result['id']; $deptName = $result['dept_name']; $deptList[] = array('id' => $id, 'dept_name' => $deptName); } |
ここでは、PDOStatementクラスのfetchメソッドを使っています。引数にデータ取得のスタイルを入れる事が出来ます。ここでは、結果セットに 返された際のカラム名で添字を付けた配列を返す、PDO::FETCH_ASSOCを使います。このように書く事で、deptListという配列の中に、結果セットが入りました。では、一応web用かなにかで利用する為に、この値をjsonで返してみましょう。
1 |
echo json_encode($deptList); |
なにも難しい事はないですね。