1

我正在使用 Play Framework 2.1,当我尝试执行此 MySQL 代码以创建新表时出现异常。

[SQLException: Parameter index out of range (1 > number of parameters, which is 0).]

执行调用它的代码是这个 def:

def create(name: String):Boolean = {
if(!contains(name)) // a function that tests if the table already exists
{
  val query = SQL("""
      CREATE TABLE `database`.`{name}` (
      `id` INT NOT NULL ,
      `address` TEXT NULL ,
      `city` TEXT NULL ,
      `state` TEXT NULL ,
      `zip` INT NULL ,
      `ownerid` INT NULL ,
      `price` DOUBLE NULL ,
      `rooms` INT NULL ,
      `available` BIT NULL ,
      `type` TEXT NULL ,
      PRIMARY KEY (`id`) );
  """).on('name -> name).execute()(conn) //Play compilation error is highlighting this line
  true
}
else    false

}

如果我只使用更改字符串的“+name+”方法,这将有效,但这会使它对 SQL 注入开放,并且使用 .on 似乎是执行此操作的正确方法。

4

1 回答 1

0

所以看起来是 PreparedStatement 不能使用表名作为参数,所以看起来我必须手动更改字符串。如果有人对如何在避免 SQL 注入的同时做到这一点有任何见解,那就太好了。

于 2013-03-07T22:59:41.880 回答