在我看来,我有一个类似这样的查询:
$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”的结果集中.
这是一个问题:
现在,如果我将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... }
有人可以告诉我这里究竟发生了什么,以及为什么查询不能像我最初使用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... }