サーバーサイドJavaScript CGJSフレームワーク
SQLパラメータのBIND方法

SQLインジェクションの対策から、SQL文でのパラメ-タ使用はBINDによる値の設定が推奨されています。
このページではCGJSでの3種類のBIND方法を説明します。
BINDパラメータの指定に文字':'を使用しますが、BIND以外に':'を使用する場合は'::'とエスケープして使用してください。
(例:PostgreSqlでのCAST :var_str::int)
1.順序による値のBIND
CGJS拡張関数の引数(配列)内で、並び順で指定される値をパラメータにBINDします。
並び順は、文字 ":" に続く1からの番号で指定します。
 ・・・・・・・・・・・・・・・・・・・
 // データベースに接続
 conn = openDb(DB_NAME, DB_LIB, DB_PARAM);
 ・・・・・・・・・・・・・・・・・・・
 let sql = "insert into Population_T (PrefCd, CityCd, AgeCd, SexCd, Value) values (:1, :2, :3, :4, :5)";
 let obj_record = [ ['13', '0004', '001', '034', 54000 ], ['13', '0004', '001', '035', 54000 ],
  ['13', '0004', '002', '034', 57000 ], ['13', '0004', '002', '035', 49000 ] ];
 execute(conn, sql, obj_record); // Population_T に4レコードが挿入される
 ・・・・・・・・・・・・・・・・・・・
 let sql = "select * from Population_T where PrefCd = :1 and CityCd = :2";
 let result = select(conn, sql, [ '13', '0004' ]); // result は obj_record と同じデータになる
 ・・・・・・・・・・・・・・・・・・・
拡張関数の配列の引数は、更新系(insert、update等)の場合、配列の配列が可能ですが、
その他(select等)の場合は単純な配列です。
2.変数名による値のBIND
SQL実行時点で参照可能な、文字 ":" に続く変数名の値をパラメータにBINDします。
 ・・・・・・・・・・・・・・・・・・・
 // データベースに接続
 conn = openDb(DB_NAME, DB_LIB, DB_PARAM);
 ・・・・・・・・・・・・・・・・・・・
 let sql = `insert into Population_T (PrefCd, CityCd, AgeCd, SexCd, Value) values
  (:pref, :city, :age, :sex, :population)`;
 execute(conn, sql); // Population_T に1レコードが挿入される
 ・・・・・・・・・・・・・・・・・・・
 let sql = "select * from Population_T where PrefCd = :pref and CityCd = :city";
 let result = select(conn, sql);
 ・・・・・・・・・・・・・・・・・・・
3.式を評価した値のBIND
SQL実行時点で、文字 ":" に続く中括弧{}で囲まれた式を評価した値をパラメータにBINDします。
 ・・・・・・・・・・・・・・・・・・・
 // データベースに接続
 conn = openDb(DB_NAME, DB_LIB, DB_PARAM);
 ・・・・・・・・・・・・・・・・・・・
 let sql = "select * from Population_T where PrefCd = :pref and CityCd = :{get_prefectural_capital(pref)}";
 let result = select(conn, sql);
 ・・・・・・・・・・・・・・・・・・・