繁体   English   中英

PHP GET MySQL的命令,如果不为空,则通过echo else echo如何

[英]PHP GET MySQL order by if not empty echo else echo how

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

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

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

现在我们必须以某种方式将其回显给查询,但是我不知道如何,查询就像这样:

$result = mysqli_query($database,"SELECT * FROM `stock` order by `id` ASC");
$rows = mysqli_num_rows($result);
if (mysqli_num_rows($result) > 0) {

我尝试通过用'id'替换订单来插入整个PHP $ order_,但它给了我错误。

任何想法如何做到这一点?

首先,您需要检查$_GET['order']是否有效,使用in_array()并检查接收到的订单是否在允许值的数组中(白名单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 ) );

整个“ 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注入。

您可以使用这样的东西:

$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){

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM