页面显示所有结果,现在我想过滤结果和每页有多少结果。为此,访问者使用简单的html GET表单来选择过滤器。
现在我获得GET表单并尝试过滤结果
<?php
$order_by = mysqli_real_escape_string($database,$_GET['order_by']);
$order = if(empty($order_by)){echo 'manufacturer';}else{echo '$order_by';
?>
好了,现在我们得到了过滤器并尝试从这样的
获取MySQL的结果$set_order=mysqli_query($database,"SELECT * FROM `products` order by `$order` ASC");}
但我收到错误:
$order = if(empty($order_by)){echo 'manufacturer';}else{echo '$order_by';
找不到办法做到这一点......有什么想法吗?
答案 0 :(得分:1)
在变量周围使用单引号将不起作用 - 但为什么不分配变量然后回显它?
$order = empty($order_by) ? 'manufacturer' : $order_by;
echo $order;
但是如果要在sql查询中使用它,则不需要回显它。
经过一段短暂的休息时间,你有一个答案,但我也会在这里发布。
$order = empty($order_by) ? 'manufacturer' : $order_by;
$sql="select * from `products` order by `{$order}` asc;";
$set_order=mysqli_query( $database, $sql );
if( $set_order ){
/* process recordset */
}
答案 1 :(得分:0)
试试这个:
if(empty($order_by)){$order = 'manufacturer';}else{$order = $order_by;}
答案 2 :(得分:0)
首先,为order by设置默认值。
$order = 'manufacturer';
接下来,如果用户提供了其他内容,请将其替换为默认值。
if (!empty($_GET['order_by'])) {
$order = mysqli_real_escape_string($database, $_GET['order_by']);
}
然后你可以使用它最终存在于你的查询中的任何内容。
$set_order = mysqli_query($database, "SELECT * FROM `products` order by `$order` ASC");
在这里使用mysqli_real_escape_string
绝对是好的,但我建议根据可接受的列名列表检查用户输入,以减轻SQL注入风险。