#■PHP(PDO)
##基本的なルールは以下参照
PHPでのSQLインジェクション対策はどのように行いますか?
##bindParamで入力値をエスケープする際に使う定義済み定数
(出典) http://php.net/manual/ja/pdo.constants.php
##bindParamする型がfloatの場合
###(問題) PDO::PARAM_FLOATがない
上述のが画像を見ると見事に「PDO::PARAM_FLOAT」が存在しない。
例えば、 UPDATE tableName SET kawase = $usdjpy に
$usdjpy = 101.10 をあてはめたい場合はどうすればいいか?
###(対策)PDO::PARAM_STR を利用すればOK。
PDO::PARAM_STRでbindすれば問題ない。
MySQLの動作しか確かめていないが、
例えば、 UPDATE tableName SET kawase = '101.10'となっても、
MySQL側でFLOAT型と判断して、計算してくれる。
同様に、「UPDATE tableName SET usdPrice = 10000/$usdjpy 」
のような場合でも、PDO::PARAM_STRでbindしても、
「UPDATE tableName SET usdPrice = 10000/'101.10' 」
を
「UPDATE tableName SET usdPrice = 10000/101.10 」
と読み替えてくれる。
##実際に作成した関数
$params = array(
array($name, PDO::PARAM_STR),
array($email, PDO::PARAM_STR),
);
function select_InjectionSafe($sql,$params = array() ){
$stmt = $this->pdo->prepare($sql);
if(count($params) > 0){
for($i=0;$i < count($params);$i++){
$stmt -> bindParam($i+1,$params[$i][0],$params[$i][1]);
}
}
$stmt->execute();
return ...
}