PHP GET MySQL order by 如果不为空 echo else echo 如何

标签 php html mysql sql database

我有一个页面,其中显示所有库存产品,我希望按 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) {

我尝试插入整个 PHP $order_by 将订单替换为“id”,但它给了我错误。

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

最佳答案

首先,您需要检查 $_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 ) );

关于PHP GET MySQL order by 如果不为空 echo else echo 如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32638651/

相关文章:

php - 我的 php/mysql 应用程序中这个奇怪的代码来自哪里以及如何摆脱它

html - CSS 新手 TOP 问题 : Adding padding in exercise creates large gap on top of element. 添加 margin-top of 0 修复它但我不知道为什么

mysql - 通过传输格式将日期从 clojure 服务器传递到 cljs 前端

MySQL 查询 : How to show all number and sum it

javascript在切换类的开始/原始类的结尾添加不必要的空格

php - MySQL GROUP BY 多个列和字段

PHP 在 require_once 上失败

php - 快速发送http请求

php - 第 317 行的 fatal error : Call to undefined function apply_filters() in/public_html/wp-includes/load. php

php - 使用php将日期时间保存在mysql中