【问题标题】:mysqli real escape string issuesmysqli 真正的转义字符串问题
【发布时间】:2014-01-04 16:13:34
【问题描述】:

如何在我的脚本中使用mysqli_real_escape_string 来防止 SQL 注入。我正在编写一些代码并在这里提出一些问题,建议我使用mysqli_real_escape_string 而不是mysql_real_escape_string,问题是我的代码在我想要保护的变量之后才建立连接。有人建议我应该使用准备好的语句,但在搜索了http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php 之后,我感到更加困惑。现在,如果代码完全不应该做的事情,它会将空值/行插入我的表中,从我的阅读来看,这可能是因为使用了mysqli_real_escaape_string

感谢任何想法或帮助,我很沮丧和困惑,但仍在努力学习。代码如下:

<?php
//Form fields passed to variables
$manu = mysqli_real_escape_string($_POST['inputManu']);
$model = mysqli_real_escape_string($_POST['inputModel']);
$desc = mysqli_real_escape_string($_POST['inputDesc']);

//Connect to database using $conn
include ('connection.php');

//Insert record into table 
$sql = "INSERT INTO gear (`id`,`manu`,`model`,`desc`)
      VALUES (NULL,'$manu','$model','$desc')";

//Check for empty fields
if (isset($_POST['submit'])) 
{   
   foreach($_POST as $val) 
    {
      if(trim($val) == '' || empty($val))
       {
       die('Error: ' . mysqli_error());
       echo "Please complete all form fields!";
       echo "<meta http-equiv='Refresh' content='3; URL=../add.php'>"; 
       }
    }

     if (!mysqli_query($conn,$sql))
     {
     die('Error: ' . mysqli_error($conn));
     }
     else
     {
       //echo "1 record added";
         echo "Success, You added the ".$manu." ".$model."";
         echo "<meta http-equiv='Refresh' content='3; URL=../index.php'>";
     }   
}
else
{
echo "some error";
}

mysqli_close($conn);
?>

【问题讨论】:

    标签: php mysqli


    【解决方案1】:
    <?php
    //Connect to database using $conn
    include ('connection.php');
    
    //Form fields passed to variables
    $manu  = mysqli_real_escape_string($conn, $_POST['inputManu']);
    $model = mysqli_real_escape_string($conn, $_POST['inputModel']);
    $desc  = mysqli_real_escape_string($conn, $_POST['inputDesc']);
    

    【讨论】:

    • 这是有道理的,我看到了与旧 mysql 用法的区别。谢谢
    【解决方案2】:

    希望下面的代码对你有所帮助。

    <?php
        //Connect to database using $conn
        /*in connection.php
        $link = mysqli_connect("localhost", "root", "", "test");
        */
        include ('connection.php');
    
    
        //Check for empty fields
        if (isset($_POST['submit'])) 
        {  
                //Form fields passed to variables
        $manu = mysqli_real_escape_string($link,$_POST['inputManu']);
        $model = mysqli_real_escape_string($link,$_POST['inputModel']);
        $desc = mysqli_real_escape_string($link,$_POST['inputDesc']);
    
    
        if($manu!='' && $model!="" && $desc!="")
        {
    
        //Insert record into table 
            $sql = "INSERT INTO gear (`id`,`manu`,`model`,`desc`)
              VALUES (NULL,'$manu','$model','$desc')";
            $r=mysqli_query($link,$sql) ; 
               //echo "1 record added";
               if($r)
               {       
                 echo "Success, You added the ".$manu." ".$model."";
                // echo "<meta http-equiv='Refresh' content='3; URL=../index.php'>";
                } 
             }
             else
             {
                 echo "Please complete all form fields!";
             }
    
        }
    
        ?>
    

    【讨论】:

    • 好的,那么与上述方法相比,这种方法的主要优势是什么?我只是想看看这有什么不同,谢谢,
    • 早些时候,我认为您使用两个页面来执行此任务,一个使用 html,另一个使用 php。在我的代码中,我只使用了一个页面来完成此任务。请在提交表单后进行每一次思考。就是这样。
    猜你喜欢
    • 2014-07-10
    • 1970-01-01
    • 2015-12-02
    • 2012-07-03
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2014-09-11
    相关资源
    最近更新 更多