我有一些从数据库中提取信息的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参数?
您所做的是:
SELECT "Title" FROM Items WHERE ID = 5
不能将准备好的语句绑定用于标识符,只能用于参数。
是的,它是这样工作的
为数据准备的语句,而不是为任意查询部分准备的语句。
因此,不能在原始mysqli中使用占位符作为标识符。但是,您可以使用safemysql:
$field = $db->getOne("SELECT ?n FROM Items WHERE ID = 5", 'Title');
但是,如果你真的需要动态地选择一个特定的字段,那么你的设计就有问题。