プリペアードステートメントへの変更
PHP、MySQL初級者です。
ある商品を検索するサイトを運営していますが、SQLインジェクション対策がなされておらず、mysql_queryで書いていたものを、プリペアドステートメントに初挑戦しています。
元々作ったプログラムを、ネットの情報や本を参考に修正していますが、検索をすると画面が真っ白になってしまう現象から2日間抜け出せずにいます。
どなたかご教授いただけますでしょうか。PHPのバージョンは5.2、Windows環境です。
ちなみに、$display_fromはページネーションに関係するものです。
また、//でコメントアウトしている箇所は一旦PEAR::DBをつかうやりかたに修正したなごりです。
また、rs2のところは検索結果のヒット数を表示させるためにわざわざ全件を取得しています。(このやり方自体スマートではない感じがしていますが。。)
/*POSTでkeywordを取得*/
if($_POST['keyword']!=""){
$keyword=$_POST['keyword'];
}
elseif($_GET['pageID']!=""){
$keyword=$_SESSION['keyword'];
}
else{
}
//ログイン情報をインクルードする
include('db_login.php');
//PEAR DBの機能が含まれるDB.phpもインクルードする
require_once("DB.php");
//接続する
$connection = DB::connect("mysql://$db_username:$db_password@$db_host/$db_database");
if(DB::isError($connection)){
die("Could not connect to the database: <br />".DB::errorMessage($connection));
}
//$db = mysql_connect("localhost", "root", "root")or die ('DB Connection Error= '. mysql_error());
//mysql_select_db("book_db", $db)or die ('DB Connection Error= '.mysql_error());
//$rs = mysql_query("SET character set UTF8", $db);
//$rs2 = mysql_query("SET character set UTF8", $db);
/*keywordが空白だった場合*/
if($keyword==""){
$query="SET character set UTF8";
$rs=$connection->query($query);
$query="select * from book_card order by point desc limit $display_from, 50";
$rs=$connection->query($query);
if(DB::isError($rs)){
die("Could not query the database:<br />$query ".DB::errorMessage($rs));
}
$query2="SET character set UTF8";
$rs2=$connection->query($query2);
$query2="select * from book_card";
$rs2=$connection->query($query2);
if(DB::isError($rs2)){
die("Could not query the database:<br />$query2 ".DB::errorMessage($rs2));
}
/*もともとのコード
$rs=mysql_query("select * from book_card order by point desc limit $display_from, 50", $db);
$rs2=mysql_query("select * from book_card", $db);
*/
}
/*keywordに何か入っていた場合*/
else{
$query="SET character set UTF8";
$rs=$connection->query($query);
//$query="select * from book_card where Name like '%$keyword%' order by point desc limit $display_from, 50";
//$rs=$connection->query($query);
$query = "select * from book_card where Name like ? order by point desc limit ?, 50";
$rs = $connection->prepare($query);
$data = array("%$keyword%", $display_from);
$connection->execute($rs, $data);
$query2="SET character set UTF8";
$rs2=$connection->query($query2);
//$query2="select * from book_card where Name like '%$keyword%'";
//$rs2=$connection->query($query2);
$query2 = "select * from book_card where Name like ?";
$rs2 = $connection->prepare($query2);
$data2 = "%$keyword%";
$connection->execute($rs2, $data2);
/*もともとのコード
$rs=mysql_query("select * from book_card where Name like '%$keyword%' order by point desc limit $display_from, 50", $db);
rs2=mysql_query("select * from book_card where Name like '%$keyword%'", $db);
*/
}
分かりにくい質問ですみませんが、どなたかお分かりの方ご教授いただけますでしょうか。
何卒宜しくお願い致します。
お礼
本に書いてあるとおりにしようとしすぎて 迷走していたもので、そう教えていただけると助かります。 とりあえず、個人でやっている段階なので、 適宜使いやすい方法でしていこうと思います。 内容のチェックは、本に従いながらやっていましたが、 あれはバリデート処理というんですね、ふむふむ。 いつもありがとうございます^^