构建一个mysqli查询,其中显示order by和per page


Building a mysqli query with order by and per page to show

页面显示所有结果,现在我想过滤结果以及每页有多少结果。为此,访问者使用一个简单的htmlGET表单来选择过滤器。

现在我得到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';

找不到这样做的方法。。。知道吗?

在变量周围使用单引号是行不通的,但为什么不分配变量,然后回显它呢?

$order = empty($order_by) ? 'manufacturer' : $order_by;
echo $order;

但是,如果要在sql查询中使用它,则不需要回显它。

在短暂的8小时睡眠后,你有了答案,但我也会在这里发布。

$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 */
}

首先,设置订单依据.的默认值

$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注入风险。

试试这个:

if(empty($order_by)){$order = 'manufacturer';}else{$order = $order_by;}