我有一些从数据库中提取信息的PHP代码。它使用一个准备好的语句,如下所示工作正常:
<?php
$n = '5';
if ($stmt = $connection->prepare("SELECT Title FROM Items WHERE ID = ?"))
{
$stmt->bind_param("s", $n);
$stmt->execute();
$stmt->bind_result($title);
while ($stmt->fetch())
{
echo $title;
}
$stmt->close();
}
?>
让我们说这将回应“蝙蝠侠”。
但是,当我将占位符移动到此处时:
"SELECT ? FROM Items WHERE ID = 5"
并改变:
$n = 'Title';
它没有回应“蝙蝠侠”,而是回应“标题”。是否无法将占位符用作SELECT参数?
答案 0 :(得分:2)
你做的是:
SELECT "Title" FROM Items WHERE ID = 5
您不能将准备好的语句绑定用于标识符,仅用于参数。
答案 1 :(得分:0)
是的,它就是这样的。
为数据准备的语句,而不是任意查询部分。
因此,您不能将占位符用于具有原始mysqli的标识符。但是,您可以使用safemysql:
执行此操作$field = $db->getOne("SELECT ?n FROM Items WHERE ID = 5", 'Title');
但如果您确实需要动态选择一个特定字段,那么您的设计就会出现问题。