我有一个来自,其中 2 个字段如下
<select name="sortfield">
<option value="name" selected="selected">Name</option>
<option value="price">Price</option>
<option value="id">ID Code</option>
</select>
<select name="sortdir">
<option value="asc" selected="selected">Ascending</option>
<option value="desc">Descending</option>
</select>
这是通过$_REQUEST[]
在下一页上获得的,然后将其添加到查询中以确定查询结果如何排序,快速、肮脏、未清理的方式是这样的
$query .= "ORDER BY ".$_REQUEST['sortfield']." ".$_REQUEST['sortdir'];
显然这可能是 sql 注入的问题,我可以解决这个问题的一种方法是更改值并在进行查询以换出值时使用 switch case,就像这样
switch($_REQUEST['sortfield'])
{
case '5524879':
$query .= "ORDER BY name";
break;
case '4587532':
$query .= "ORDER BY price";
break;
default:
$query .= "ORDER BY id";
}
虽然这可以帮助防止 sql 注入,但它不是很动态,因为如果查询/表结构发生变化,每次都必须更改页面,我想知道是否有更动态的方法来清理字符串,而不是必须使用switch ... case