gpt4 book ai didi

php - 是否可以将 bind_param 用于 ORDER BY?

转载 作者:可可西里 更新时间:2023-11-01 12:50:51 25 4
gpt4 key购买 nike

<分区>

在我看来,我有一个类似这样的查询:

$sort = isset($sort) ? sanitize($_sort) : 'id';

if ($result = $link->prepare("
SELECT id, price
FROM items
ORDER BY ?
"))
{
$result->bind_param("s", $sort);
$result->execute();
etc...
}

当我在不设置排序变量的情况下运行此代码块时,它运行时不会出现与在 ORDER BY 子句中使用 ? 相关的错误,并且结果集显示在看起来像带有“ORDER BY id”的结果集。

如果我将排序变量设置为类似“price ASC”的值,我仍然得到一个似乎是“ORDER BY id”而不是“ORDER BY price ASC”的结果集。

现在,如果我修改代码并像这样运行它:

$sort = isset($sort) ? sanitize($_sort) : 'id';

if ($result = $link->prepare("
SELECT id, price
FROM items
ORDER BY $sort
"))
{
$result->execute();
etc...
}

它运行正确,结果集与我在 phpMyAdmin 中的查询相同。

这里到底发生了什么以及为什么查询没有按照我最初使用 bind_param 的预期运行。

在我看来,它应该可以工作,因为不会出现与这种使用相关的错误......但实际上它似乎不适用于 ORDER BY 子句。这几乎就像它在运行 bind_param 时没有翻译排序变量。

编辑:

对于任何感兴趣的人 -

if (isset($sort))
{
$acceptableSortValues = array('name', 'price ASC', 'price DESC');
$sort = sanitize($sort);
if (!in_array($sort, $acceptableSortValues))
{
$sort = 'name';
}
}
else
{
$sort = 'name';
}

if ($result = $link->prepare("
SELECT name, price
FROM items
ORDER BY $sort
"))
{
$result->execute();
etc...
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com