PHP PDO准备的语句给出';无效语法';错误


PHP PDO prepared statements giving 'invalid syntax' error

我在PDO中使用准备好的语句从SQL服务器中选择一些数据,但我遇到了语法错误:

QLSTATE[HY000]: General error: 10007 Incorrect syntax near 'memb_user'. [10007] (severity 5) [(null)] in

memb_user是表名。下面是准备好的语句和我正在使用的数组:

$query =   "SELECT ?, ? FROM ? WHERE ? = ? AND ? = ?";
   $data    =   array($this->columns['username'], $this->columns['password'], $this->table,
                      $this->columns['username'], $this->user , $this->columns['password'], $this->pass);

这就是我执行语句的方式:

$statement  =   $this->connection->prepare($query);
        $statement->execute($data);

我试着将查询放入sql server中,并用正确的值替换占位符,这似乎没问题,唯一值得关注的是WHERE条件中需要使用的引号。那么我是不是执行错误了?

正如@sean所说,"列或表名不能使用占位符。"但是,您可以通过sprintf()将它们注入查询中。注意:确保所有POST/GET数据都正确转义。

试试这个:(未经测试)

$query = sprintf('SELECT `%1$s`, `%2$s` FROM `%3$s` WHERE ? = ? AND ? = ?', $this->columns['username'], $this->columns['password'], $this->table);
$data  = array($this->columns['username'], $this->user , $this->columns['password'], $this->pass);