我可以在PDO中使用列的名称作为参数吗?

时间:2014-04-23 20:43:12

标签: php mysql pdo

我正在尝试执行此操作:

$colparam = 'abcd';
$stmt = $db->prepare("SELECT DISTINCT ? AS kol FROM katalog ORDER BY kol ASC");
$stmt->execute(array($colparam));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

并且它不起作用(没有错误,只是结果为空数组。)

相反,这很好用:

$stmt = $db->prepare("SELECT DISTINCT abcd AS kol FROM katalog ORDER BY kol ASC");
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

那么使用参数作为PDO中列的名称是否有任何问题?

1 个答案:

答案 0 :(得分:4)

不,您不能对MySQL中的任何数据库对象(表,列等)使用参数替换。

当你考虑准备好的陈述实际上是什么时,这就完全有道理了。当MySQL甚至不知道所涉及的数据库对象时,如何准备查询执行计划。

我当然希望更多的文档能够真正涵盖准备好的语句实际上做了什么(除了它明显用于参数化之外)。

这是链接到MySQL准备语句文档以获得更多阅读:

https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html