在我心目中,我有一个查询是这样的:
$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”。
这里是IN ONE森泰斯问题:
现在,如果我设置排序变量类似“价格ASC”我仍然得到一个结果集,这似乎是“ORDER BY ID”,而不是“按价格排序ASC”。
当我运行查询作为在phpMyAdmin查询,它返回一个基于“价格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...
}