【问题标题】:PHP MySQLi prepared statements - SELECTPHP MySQLi 准备好的语句 - SELECT
【发布时间】:2014-06-02 19:48:11
【问题描述】:

我的 SELECT 语法有问题。 代码:

$stmt = $this->con->prepare("SELECT ? FROM `shop_items` WHERE `id` = ?");

$stmt->bind_param("si", $what, $itemsId);

$stmt->execute();

$stmt->bind_result($res);

$stmt->fetch();

echo $res;

当我想选择“名称”时,它会回显“名称”而不是来自数据库的结果。如何解决?

【问题讨论】:

  • 不能这样做 => SELECT ?
  • 查询中的字段名称不能使用占位符。

标签: php mysqli


【解决方案1】:

占位符? 只能在准备好的语句中用于替换值,不能用于字段名、表名或语句。

您正在尝试将其用作字段名称。

你可以建立你的查询字符串

$stmt = $this->con->prepare("SELECT " . $what . " FROM `shop_items` WHERE `id` = ?");

但您必须确保您可以信任 $what 中的内容,以避免 sql 注入。

否则你可能会得到所有字段

$stmt = $this->con->prepare("SELECT * FROM `shop_items` WHERE `id` = ?");

获取一个关联数组的结果(见http://it1.php.net/manual/en/mysqli-result.fetch-assoc.php),然后只获取$what指向的字段值

【讨论】:

    【解决方案2】:

    您似乎在 SELECT 之后使用了问号 (?)。它应该是 * 符号,您可以从“shop_items”中选择它。你可以用那个再试一次。

    【讨论】:

    • @GigaWatt:您不能使用? 作为字段名称。
    • @GigaWatt 不在SELECT之后。
    • "它应该是* 符号,您可以从 'shop_items' 中选择它。" - 或者选择实际的列名称。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2016-07-22
    • 2012-12-01
    相关资源
    最近更新 更多