0

我有一些从数据库中提取信息的 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 参数吗?

4

2 回答 2

2

你所做的是这样的:

SELECT "Title" FROM Items WHERE ID = 5

您不能将准备好的语句绑定用于标识符,只能用于参数。

于 2013-08-12T19:00:00.003 回答
0

是的,它是这样工作的。
为数据准备的语句,而不是任意查询部分。

因此,您不能将占位符用于带有原始 mysqli 的标识符。但是,您可以使用safemysql做到这一点:

$field = $db->getOne("SELECT ?n FROM Items WHERE ID = 5", 'Title');

但是,如果您确实需要动态选择一个特定字段 - 您的设计有问题。

于 2013-08-12T19:00:03.403 回答