書籍に掲載されていたコードですが、
SQLインジェクション対策ができているのでしょうか?
function executeSQL($sql, $array){ try{ if(!$pdo = $this->Connectdb())return false; $stmt = $pdo->prepare($sql); $stmt->execute($array); return $stmt; }catch(Exception $e){ return false; } } function InsertGoods(){ $sql = "INSERT INTO goods VALUES(?,?,?)"; $array = array($_POST['GoodsID'],$_POST['GoodsName'],$_POST['Price']); parent::executeSQL($sql, $array); } function UpdateGoods(){ $sql = "UPDATE Goods SET GoodsName=?, Price=? WHERE GoodsID=?"; //array関数の引数の順番に注意する $array = array($_POST['GoodsName'],$_POST['Price'],$_POST['GoodsID']); parent::executeSQL($sql, $array); }
とあったのですが、
INSERTやUPDATEする際には
プレースホルダを使い、SQLインジェクション対策をする
と思っています。
また別のコードとなりますが自分の書いたコードでは
public function create($user_id, $zip1, $zip2, $pref_code, $city, $address, $name01, $name02, $tel) { $sql = "INSERT INTO address ( user_id, zip1, zip2, pref_code, city, address, name01, name02, tel, create_date, update_date) VALUES (:user_id, :zip1, :zip2, :pref_code, :city, :address, :name01, :name02, :tel, now(), now())"; $stmt = $this->pdo->prepare($sql); $stmt->bindValue(':user_id', $user_id); $stmt->bindValue(':zip1', $zip1); $stmt->bindValue(':zip2', $zip2); $stmt->bindValue(':pref_code', $pref_code); $stmt->bindValue(':city', $city); $stmt->bindValue(':address', $address); $stmt->bindValue(':name01', $name01); $stmt->bindValue(':name02', $name02); $stmt->bindValue(':tel', $tel); $stmt->execute(); $_SESSION['message_act'] = "登録しました。"; header('location: address.php'); }
としています。
正直、書籍のものがコードが少なく、SQLインジェクションに対しても有効なのであればこういった書き方をしたいとおもっています。
?に対して順番にセットしていくだけでも良いのでしょうか?
よろしくおねがいします
回答3件
あなたの回答
tips
プレビュー