在PDO预处理语句中使用问号而不是表名

时间:2013-08-27 18:48:20

标签: php mysql pdo prepared-statement tablename

我需要知道我可以在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 priority = priority + 1 WHERE id =?'

2 个答案:

答案 0 :(得分:0)

除了这个简单的问题,还有另外一个 - 你的代码闻起来很糟糕的数据库设计。在正确规划的数据库中,从不需要通过POST请求接收表名。

您很可能使用多个表,只需要使用一个表。

答案 1 :(得分:-3)

您需要绑定如下参数:

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

Source (see Example #2)