Cra*_*der 7 php mysqli sql-order-by prepared-statement bindparam
在我看来,我有一个类似这样的查询:
$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...
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码块而不设置排序变量时,它运行没有与使用?相关的错误?在ORDER BY子句中,结果集显示在带有"ORDER BY id"的结果集中.
这是一个问题:
现在,如果我将sort变量设置为"price ASC"之类的东西,我仍然会得到一个似乎是"ORDER BY id"而不是"ORDER BY price ASC"的结果集.
当我在phpmyadmin中作为查询运行查询时,如果我以这种方式定义查询,它将根据"价格ASC"返回正确的结果集.
现在,如果我改变代码并像这样运行它:
$sort = isset($sort) ? sanitize($_sort) : 'id';
if ($result = $link->prepare("
SELECT id, price
FROM items
ORDER BY $sort
"))
{
$result->execute();
etc...
}
Run Code Online (Sandbox Code Playgroud)
它运行正常,结果集与我在phpmyadmin中的查询相同...
有人可以告诉我这里究竟发生了什么,以及为什么查询不能像我最初使用bind_param那样运行.
在我看来,它应该工作,因为没有出现与此类使用相关的错误......但在实践中,它似乎不适用于ORDER BY子句.它几乎就像在运行bind_param时没有翻译sort变量一样.
感谢您阅读我的问题,任何有关它的输入将不胜感激!
编辑:
对任何感兴趣的人
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...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3409 次 |
| 最近记录: |