参数化查询一般是防止SQL注入的万能型解决方案,查询参数的做法是在准备查询语句时,在对应参数的地方使用参数占位符,在执行这个参选准备好的查询时提供一个参数,但是这个查询参数总是被视为一个字面值,这将导致下列问题。

  1. 多个值的列表不可以当成单一参数。如:
    SELECT * FROM [表] WHERE ID IN (?);
  2. 列名、列名无法做为参数:
    SELECT * FROM ? ORDER BY ?;
  3. SQL关键字不能做为参数:
    SELECT * FROM [表] ORDER BY ID ?;