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