prepareメソッド、executeメソッドを使って安全にSQLを処理する方法を示します。
外部から来る入力値をSQLに使う場合などは、SQLインジェクションのリスクがあるため、このメカニズムでコードを実装することをオススメします。
以下はMySQLに接続してid=1のカラムを検索するサンプルです。
※以下のコードを実行するには
pear-MDB2 が必要です。
PEARとはPHP向けの標準ライブラリのことで、ここではデータベースに簡単に接続できるライブラリであるMDB2を使います。
<?php
require_once'MDB2.php';
$username = "dbuser";
$password = "dbpass";
$host = "dbhost";
$database = "dbname";
$db = MDB2::connect("mysql://$username:$password@$host/$database");
if (MDB2::isError( $db )) {
die($db->getMessage());
}
$sql = "select * from table where id = ?";
$sth = $db->prepare($sql);
// execute で select * from table where id = 1 を安全に実行
$result = $db->execute($sth, array("1"));
if (MDB2::isError( $result )) {
die($result->getMessage());
}
while($row = $result->fetchRow()){
echo $row[0]; // 返却データをループ
}
?>
prepareメソッドでSQLを用意します。
そして、
?の部分が後ほどexecuteで実行される際に置き換えられます。
2つもメソッドを呼び出すのが面倒だという場合は、queryに2つパラメータを渡すことで簡単に使えます。
次のように置き換えます。
$sql = "select * from table where id = ?";
$sth = $db->prepare($sql);
$result = $db->execute($sth, array("1"));
↓
$sql = "select * from table where id = ?";
$result = $db->query($sql, array("1"));
スポンサードリンク
PHPサンプル集