准备好的语句中的MySQLi绑定参数不会;除非插入“;在哪里”;


MySQLi binding parameters in a prepared statement doesn't work unless inserted after "WHERE"

我有一些从数据库中提取信息的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');

但是,如果你真的需要动态地选择一个特定的字段,那么你的设计就有问题。