我正在尝试执行此操作:
$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中列的名称是否有任何问题?
答案 0 :(得分:4)
不,您不能对MySQL中的任何数据库对象(表,列等)使用参数替换。
当你考虑准备好的陈述实际上是什么时,这就完全有道理了。当MySQL甚至不知道所涉及的数据库对象时,如何准备查询执行计划。
我当然希望更多的文档能够真正涵盖准备好的语句实际上做了什么(除了它明显用于参数化之外)。
这是链接到MySQL准备语句文档以获得更多阅读:
https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html