我在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条件中引用的内容。我执行错误了吗?
答案 0 :(得分:2)
正如@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);