PHP GET MySQL命令如果不是空的echo其他echo如何

时间:2015-09-17 19:39:09

标签: php html mysql sql database

我有一个页面,我显示库存中的所有产品,我希望它们按ID或名称或日期等订购。

这样做的方法是通过表格行标题上的链接获取订单,并像这样获取

Queue

现在我们必须以某种方式回应查询,但我不知道如何,查询是这样的:

$order_by = $_GET['order'];
if (!empty($order_by)) {
    echo "id";
} else {
    echo "$order_by";
}

我尝试插入整个PHP $ order_by替换了#id; id'但它给了我错误。

知道如何实现这个目标吗?

3 个答案:

答案 0 :(得分:1)

首先,您需要检查$_GET['order']是否有效,使用in_array()并检查收到的订单是否在允许值数组(白名单数组)中。我不认为mysqli_real_escape_string()足以保护order by子句,因为它是列名,而不是值。如果验证失败,请使用默认列名称(id)。

$order_whitelist = [ 'id', 'name', 'date' ];

if ( !empty( $_GET['order'] ) && in_array( $_GET['order'], $order_whitelist, true ) )
    $order_by = $_GET['order'];
else
    $order_by = 'id';

现在可以安全地构建查询,为此sprintf()函数可能很有用。

$result = mysqli_query( $database, sprintf( "SELECT * FROM `stock` order by `%s` ASC", $order_by ) );

答案 1 :(得分:0)

不需要替换整个“order by”。只需插入您想要的订单。

<?php
$order_by = $_GET['order'];
if(!empty($order_by)){
    $result=mysqli_query($database,"SELECT * FROM `stock` order by `".$order_by."` ASC");
    $rows=mysqli_num_rows($result);
    if(mysqli_num_rows($result)>0) {do something}
?>

请注意,这不会被清理,并且可能导致SQL注入。

答案 2 :(得分:0)

您可以使用以下内容: -

$order_by = $_GET['order'];

    if(empty($order_by)){
            $order_by='id';
    }

    if(!empty($order_by)){
        $result=mysqli_query($database,"SELECT * FROM `stock` order by `".$order_by."` ASC");

        $rows=mysqli_num_rows($result);
        if(mysqli_num_rows($result)>0){