SQLiteを操作するAirアプリケーションを作成する 3-3(プリペアドステートメント編)
前回insert文を綺麗にするためのfunctionを作成した
続いてSQLインジェクションを防ぐ為、プリペアドステートメントを利用する。
セキュリティを考慮するなら基本的にこのプリペアドステートメントは利用するべきで、前回までの様なinsert文で実装するのはやめたほうが良いと思う。
ついでにコード的にも綺麗になってわかりやすい
- SQL文の作成部分を下記の様に変える
stmt.text = "INSERT INTO idol (name,height,weight,birthday,bust,waist,hip,age) VALUES ("+ ":name,"+ ":height,"+ ":weight,"+ ":birthday,"+ ":bust,"+ ":waist,"+ ":hip,"+ ":age"+ ")";
- この様にパラメータを
:name
としておくと、そこに対して値を渡せるようになる。渡す場合は下記の様に記述するstmt.parameters[":name"] = nameFieldId.text; stmt.parameters[":height"] = checkIntegerField(heightFieldId.text); stmt.parameters[":weight"] = checkIntegerField(weightFieldId.text); stmt.parameters[":birthday"] = birthdayFieldId.text; stmt.parameters[":bust"] = checkIntegerField(bustFieldId.text); stmt.parameters[":waist"] = checkIntegerField(waistFieldId.text); stmt.parameters[":hip"] = checkIntegerField(hipFieldId.text); stmt.parameters[":age"] = checkIntegerField(ageFieldId.text);
- こんな感じにしておくとセキュリティの強化も出来、コードもわかりやすくなった。
プリペアドステートメントについてはここを参照。「:name」の様な名前付きの形ではなく「?」の様に名前なしで表現も出来る