可以在PDO准备语句中参数化哪些令牌?

Dis*_*oat 8 php pdo prepared-statement

我正在玩PHP/PDO中的预处理语句.基本查询工作正常,将值传递给WHERE子句:

$stmt = $db->prepare( 'SELECT title FROM episode WHERE id=:id' );
$stmt->bindParam( ':id', $id, PDO::PARAM_INT );
$id = 5;
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

但是我有一种情况需要为字段名称传递变量.此查询(具有适当的绑定)工作正常:

SELECT :field FROM episode WHERE id=:id
Run Code Online (Sandbox Code Playgroud)

这个给出了一个错误:

SELECT title FROM :field WHERE id=:id
Run Code Online (Sandbox Code Playgroud)

这个没有给出错误,但没有返回任何行:

SELECT title FROM episode WHERE :field=:id
Run Code Online (Sandbox Code Playgroud)

那么,准备好的陈述中哪些东西应该有效?我可以'参数化'字段名称,表名等吗?

Jos*_*zel 10

您不能参数化表名,列名或IN子句中的任何内容(感谢c0r0ner 指出IN子句限制).

请参阅此问题,然后在PHP手册中进行此评论.