搜索结果页 sql 注入保护

search result page sql injection protection

我有一个这样的搜索结果页面

 <?php
      error_reporting(0);
    include("config_mashin.php");
        $group = $_GET['group'];
     $name = $_GET['name'];
     $tip = $_GET['tip'];
     $model =$_GET['model']; 
     $price1 = $_GET['price1'];

    if (!empty($price1)) {
      switch ($price1) {
      case 1  :  $price1 = " AND `price` BETWEEN 0.00 AND 10000000.00 ";  break; 
      case 2  :  $price1 = " AND `price` BETWEEN 10000001.00 AND 20000000.00 ";  break;  
      case 3  :  $price1= " AND `price` BETWEEN 200000001.00 AND 30000000.00 ";  break;   
      case 4  :  $price1 = " AND `price` BETWEEN 300000001.00 AND 40000000.00 ";  break;     
      case 5  :  $price1 = " AND `price` BETWEEN 400000001.00 AND 50000000.00 ";  break; 
      case 6  :  $price1 = " AND `price` BETWEEN 500000001.00 AND 70000000.00 ";  break; 
      case 7  :  $price1 = " AND `price` BETWEEN 700000001.00 AND 100000000.00 ";  break; 
      case 8  :  $price1 = " AND `price` BETWEEN 100000001.00 AND 150000000.00 ";  break; 
      case 9  :  $price1 = " AND `price` BETWEEN 150000001.00 AND 200000000.00 ";  break; 
      case 10  :  $price1 = " AND `price` >
     200000000.00 ";  break;   
            
      }
    }

    if (!empty($model)) {
      switch ($model) {
      case 1  :  $model = " AND `model` BETWEEN 1375.00 AND 1380.00 ";  break; 
      case 2  :  $model = " AND `model` BETWEEN 1381.00 AND 1385.00 ";  break;  
      case 3  :  $model = " AND `model` BETWEEN 1386.00 AND 1390.00 ";  break;   
      case 4  :  $model = " AND `model` BETWEEN 1391.00 AND 1395.00 ";  break;          
      }
    }



    $quer = "SELECT * FROM `caracter` WHERE 
               `name` LIKE '%".$name."%'
          AND `tip` LIKE '%".$tip."%'
          AND `group` LIKE '%".$group."%'".$model.$price1.";   
        
    $query=mysqli_query($connect,$quer)
    or die(mysqli_error());
    ?>
<?php while($row = mysqli_fetch_array($query)):
echo"to simplify to code i dont write this part" ?>
<?php endwhile;?>

在上面的代码中,基于 select 价格或型号范围以及汽车名称和组的用户,将为他或她显示最佳结果,并且效果很好,但我想知道如何保护它来自 sql 注入 请帮助我

我不确定你的 $mysqli 长什么样,所以我使用默认值 (example #1)。只需转义这些变量:

$group = $mysqli->real_escape_string($_GET['group']);
$name = $mysqli->real_escape_string($_GET['name']);
$tip = $mysqli->real_escape_string($_GET['tip']);

由于 $price1$model 被您的新字符串覆盖,因此用户无法更改它们,但我仍然建议您也使用 default: 选项(以防万一收到另一个值)。

我不知道我是否遗漏了其他任何内容,但我认为这就是您现在所需要的。

对所有变量使用mysqli_real_escape_string

$group = mysqli_real_escape_string($db, $_GET["group"]);

http://php.net/manual/en/mysqli.real-escape-string.php

防止SQL准备语句注入的推荐方法。