sql >> データベース >  >> RDS >> Mysql

node.js-sqlでパラメータをバインドして動的クエリを構築するにはどうすればよいですか?

    あなたは本当に良いスタートを切っていますが、あなたはそれを少し考えすぎていたかもしれません。秘訣は、プレースホルダー(?)を使用してクエリを作成することです。 )文字列として、同時に値の配列を作成します。

    したがって、params = { name: 'foo', age: 40 }がある場合 、次のオブジェクトを作成します:

    where = 'name LIKE ? AND age = ?';
    values = [ '%foo%', 40 ];
    

    { name: 'foo' }しかない場合 、代わりにこれらを作成します:

    where = 'name LIKE ?';
    values = [ '%foo%' ];
    

    どちらの方法でも、これらのオブジェクトをqueryで直接使用できます。 メソッド、つまり:

    var sql = 'SELECT * FROM table WHERE ' + where;
    connection.query(sql, values, function...);
    

    では、これらのオブジェクトをどのように構築するのでしょうか。実際、コードはbuildQueryと非常によく似ています。 機能しますが、それほど複雑ではありません。

    function buildConditions(params) {
      var conditions = [];
      var values = [];
      var conditionsStr;
    
      if (typeof params.name !== 'undefined') {
        conditions.push("name LIKE ?");
        values.push("%" + params.name + "%");
      }
    
      if (typeof params.age !== 'undefined') {
        conditions.push("age = ?");
        values.push(parseInt(params.age));
      }
    
      return {
        where: conditions.length ?
                 conditions.join(' AND ') : '1',
        values: values
      };
    }
    
    var conditions = buildConditions(params);
    var sql = 'SELECT * FROM table WHERE ' + conditions.where;
    
    connection.query(sql, conditions.values, function(err, results) {
      // do things
    });
    



    1. PostgreSQLストリーミングレプリケーション入門

    2. Flask-SQLAlchemyを使用してMSSQLデータベースに接続します

    3. MySQLテーブルの列を移動する方法は?

    4. 階層データを取得するためのMYSQLでの再帰的ストアドプロシージャのパフォーマンス