ログイン
英会話| 婚活| 北海道専門学校| 東北専門学校| 東海専門学校| 沖縄専門学校| ホームページ制作| 2万円HP制作|

PHPでMySQLにクエリを投げる場合

SQLインジェクション防止をしないといけないのですが、

普段、便利なのでPearを使ってます。

 

公式サイト

http://pear.php.net/manual/ja/package.database.db.db-common.quotesmart.php

 

//接続方法

$con = "mysql://DBID:DB_PASS@DB_SERVER/DB_NAME";
$opt = array(
    'debug'       => 2,
    'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($con, $opt);
if (DB::isError($db)) {
    die($db->getMessage());
}
 
//$dbオブジェクトができて、quoteSmartでSQLインジェクション防止
$sql "SELECT * FROM hogehoge WHERE name = ".$db->quoteSmart($name);
$res =& $db->query($sql);
 
という感じです。
 
これだと、$con = "mysql の部分をpgsqlとか変更するだけで、PostgreSQLとか
色々使えてさすが便利です。
 
ところがキーワード検索する際には LIKEを使いたくなる時があります。
 
その場合Pearだと LIKE ".$db->quoteSmart("%".$name."%");
としても%も文字列として扱われてうまくいきません。
 
その際は、LIKE 'mysql_real_escape_string("%".$name."%")'
 
という感じにしてます。これだと、%をエスケープしません。
どういう処理をしてるのか全部は分からないですが、関数名を見てもMySQLにこれを使えば大丈夫でしょう。
 
PHPは便利な関数が沢山あって嬉しいです。
コメント
LIKE %".$db->quoteSmart($name)."%" ~
ではダメなんすか???

た、試してみます。
by ケソケソ 2011年07月20日 16:20:05
こんにちは
ケソケソさん

quoteSmartが自動的に'を付けてくれるので

それだと、
LIKE %'お名前'%

という感じになってしまうんですよね。。。
by anji 2011年07月20日 16:43:43
なるほどです・・・
自分はずっとmysql_real_escape_stringとhtmlentitiesとかを使ってました。

使い分け出来そうですね( ̄ー ̄)
by ケソケソ 2011年07月21日 15:06:43
コメントを書く
 

カレンダー

<< 2024年05月 >>
   1234
567891011
12131415161718
19202122232425
262728293031 

私の紹介

profile
食べる事が好きです
管理画面へ