SQLiteを操作するAirアプリケーションを作成する 3-3(プリペアドステートメント編)

前回insert文を綺麗にするためのfunctionを作成した

続いてSQLインジェクションを防ぐ為、プリペアドステートメントを利用する。

セキュリティを考慮するなら基本的にこのプリペアドステートメントは利用するべきで、前回までの様なinsert文で実装するのはやめたほうが良いと思う。

ついでにコード的にも綺麗になってわかりやすい

  1. SQL文の作成部分を下記の様に変える
    stmt.text = "INSERT INTO idol (name,height,weight,birthday,bust,waist,hip,age) VALUES ("+ 
    ":name,"+
    ":height,"+
    ":weight,"+
    ":birthday,"+
    ":bust,"+
    ":waist,"+
    ":hip,"+
    ":age"+
    ")";
    
  2. この様にパラメータを
    :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);
    
  3. こんな感じにしておくとセキュリティの強化も出来、コードもわかりやすくなった。
    プリペアドステートメントについてはここを参照。「:name」の様な名前付きの形ではなく「?」の様に名前なしで表現も出来る