为了账号安全,请及时绑定邮箱和手机立即绑定

参数为空时如何获取所有值

参数为空时如何获取所有值

PHP
料青山看我应如是 2021-05-05 13:50:46
我有一个查询表单,需要从MYSQL的自定义表中获取详细信息。如果该参数留为空白,则应提取所有记录。如果在参数中输入了一个值,则应获取该值的记录。到目前为止,这是我的代码:<?php$host = 'localhost';$dbname = 'test';$username = 'test';$password = 'xxx';session_start();    global $wpdb, $current_user; $conn = mysqli_connect($host, $username, $password, $dbname);if (!$conn) {    die ('Failed to connect to MySQL: ' . mysqli_connect_error());}$param_1=mysqli_real_escape_string($conn,$_GET['param_1']); if (!empty($param_1)){  $sql = "SELECT column1 ,column2,column3,column4,column5            FROM xxx          WHERE column1='$param_1'";   } else {   $sql = 'SELECT column1 ,column2,column3,column4,column5             FROM xxx';}$query = mysqli_query($conn, $sql);if (!$query) {    die ('SQL Error: ' . mysqli_error($conn));}?>一个参数可以很好地工作。我将需要添加更多参数,并且这些参数也可以为null。例如$sql = "SELECT column1 ,column2,column3,column4,column5            FROM xxx          WHERE column1='$param_1' AND column2='$param_2";这些中的任何一个都可以为null。如何在MYSQL中处理此问题?我的问题是解决这种情况的最佳方法是什么?
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

您可以按照以下步骤


<?php

$host = 'localhost';

$dbname = 'test';

$username = 'test';

$password = 'xxx';

session_start();    

global $wpdb, $current_user; 

$conn = mysqli_connect($host, $username, $password, $dbname);

if (!$conn) {

    die ('Failed to connect to MySQL: ' . mysqli_connect_error());

}


$whereArr=[];

if(isset($_GET['param_1'])){

   $whereArr[]="column1=" . mysqli_real_escape_string($conn,$_GET['param_1']);

}


if(isset($_GET['param_2'])){

   $whereArr[]="column2=" . mysqli_real_escape_string($conn,$_GET['param_2']);

}


if(isset($_GET['param_3'])){

   $whereArr[]="column3=" . mysqli_real_escape_string($conn,$_GET['param_3']);

}


$whereStr='';

if(count($whereArr)>0){

      $whereStr="WHERE " . implode(" AND ",$whereArr);

}


  $sql = "SELECT column1 ,column2,column3,column4,column5

            FROM xxx " . $whereStr;


$query = mysqli_query($conn, $sql);


if (!$query) {

    die ('SQL Error: ' . mysqli_error($conn));

}

?>

检查上面演示的每个参数,将它们放在数组中。


然后检查数组是否被isset设置,如果isset创建一个where字符串并将其附加到查询中。


即使未设置任何参数,您的查询也将在没有where子句的情况下运行。


查看完整回答
反对 回复 2021-05-14
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

您可以执行以下操作来优化代码,


$getArr = array_filter($_GET);

// checking sql injection

$getArr = array_map(function ($v) use ($conn) {

    return mysqli_real_escape_string($conn, $v);

}, $getArr);

$temp = [];

// fetching numbers for that key

foreach ($getArr as $key => $value) {

    $temp[$key] = preg_replace('/[^\d]/', '', $key);

}

$str = '';

// creating condition for data fetched in get

array_walk($temp, function ($item, $key) use (&$str, $getArr) {

    $str .= " column$item = '" . $getArr[$key] . "' AND ";

});

// raw query

$sql = 'SELECT column1 ,column2,column3,column4,column5 FROM xxx';

// if not empty string

if (!empty($str)) {

    $sql .= rtrim($str,'AND ');

}

echo $sql;die;


查看完整回答
反对 回复 2021-05-14
  • 3 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信