构建一个mysqli查询,按顺序和每页显示

时间:2016-07-29 22:04:59

标签: php html mysql forms mysqli

页面显示所有结果,现在我想过滤结果和每页有多少结果。为此,访问者使用简单的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';

找不到办法做到这一点......有什么想法吗?

3 个答案:

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