0

我需要知道是否可以在 PDO 准备语句中使用问号 ( ?) 作为表名。

$table = $_POST['table'];
$id = $_POST['id'];
$sql = "UPDATE ? SET priority = priority + 1 WHERE id = ?";
$q = $db->prepare($sql);
$q->execute(array($table,$id));

我收到此错误:

警告:PDO::prepare() [pdo.prepare]: SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '? 附近使用的正确语法。SET 优先级 = 优先级 + 1 WHERE id = ?'

4

2 回答 2

0

除了这个简单的问题,还有另一个问题——你的代码有糟糕的数据库设计的味道。在正确规划的数据库中,您永远不需要通过 POST 请求接收表名。

您很可能正在使用多个表,而您只能使用一个。

于 2013-08-27T19:19:39.447 回答
-3

您需要像这样绑定参数:

$q->bindParam(1, $table);
$q->bindParam(2, $id);

来源(参见示例 #2)

于 2013-08-27T18:52:00.627 回答