代码之家  ›  专栏  ›  技术社区  ›  Bruce

php mysql-不插入字符串值[重复]

  •  0
  • Bruce  · 技术社区  · 7 年前

    下面是我的代码片段

    if(isset($_POST['register'])){
          include("../includes/config.php");
          $otp = $_POST['otp'];
          $sentotp = $_SESSION['otp'];
        if(empty($_POST['otp'])){
          $error= '<b>OTP cannot be empty.</b>';
          }
        if($otp==$sentotp){
          $fname=$_SESSION['fname'];
          $lname=$_SESSION['lname'];
          $email=$_SESSION['email'];
          $pwd=$_SESSION['password'];
          $phno=$_SESSION['phno'];
          $result2=mysqli_query($db,"INSERT INTO `user`(`fname`, `lname`,`password`, `phno`,`email`) VALUES ($fname,$lname,$pwd,$phno,$email);");
          unset($_SESSION['fname']);
          unset($_SESSION['lname']);
          unset($_SESSION['email']);
          unset($_SESSION['password']);
          unset($_SESSION['phno']);
          //header('Location: ../src/index.php');
            }
        }
    

    正如我们所见, fname,lname,password email 是字符串数据类型。但出于某种原因 电子邮件 无法插入我的数据库。我已尝试使用以下查询进行调试

          $result2=mysqli_query($db,"INSERT INTO `user`(`fname`, `lname`,`password`, `phno`) VALUES ($fname,$lname,$pwd,$phno);");
    

    在本例中,将执行查询。在有人建议之前 $_SESSION['email'] 可能是空的,我想澄清一下,它不是空的。我重复了这句话 $_会话['email'] 它正在返回一个完美的字符串。此外,我还设置了 电子邮件 字段设置为100,所以电子邮件的长度也应该不是问题。

    1 回复  |  直到 7 年前
        1
  •  -2
  •   spencer7593    7 年前

    为了进行调试,需要回显或vardump发送到MySQL的实际SQL文本。

    将代码分为两个步骤,首先构建SQL字符串,然后执行SQL字符串。然后在这两个步骤之间添加调试输出:

     $sqltxt = "INSERT INTO ... ";
    
     echo "sqltext=" . $sqltext ;
    
     $result2=mysqli_query($db,$sqltext);
    

    然后我们可以将实际的SQL文本带到另一个客户机,并在那里使用它。我们会发现一个问题。。。字符串文本需要用单引号括起来。


    还有 mysqli_error 函数将在检测到错误后检索MySQL错误消息。在这种情况下,如果出现错误,mysqli_查询将返回FALSE。这段代码实际上可以检查mysqli_查询返回的值,并确定语句执行是否成功,而不是把它的小指放在嘴角,邪恶博士风格的“我只是认为一切都会按计划进行。什么?”


    最后,代码中的模式似乎容易受到SQL注入的攻击。

    合并到SQL文本中的值必须正确转义。

    这个 mysqli_real_escape_string 函数是定制编写的,以实现这一点。这就是它的设计目的。

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

    更好的模式是使用 准备好的声明 具有 绑定占位符

    https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

    推荐文章