php mysql-不插入字符串值

php mysql-不插入字符串值,php,mysql,forms,session,Php,Mysql,Forms,Session,下面是我的代码片段 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($ot

下面是我的代码片段

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');
        }
    }

在本例中,将执行查询。在有人建议
$\u会话['email']
可能为空之前,我想澄清一下,它不是空的。我回显了
$\u会话['email']
,它返回了一个完美的字符串。此外,我已将
电子邮件的长度设置为100,因此电子邮件的长度也应该不是问题。

要调试此设置,请回显或vardump发送到MySQL的实际SQL文本

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

 $sqltxt = "INSERT INTO ... ";

 echo "sqltext=" . $sqltext ;

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


此外,在检测到错误后,
mysqli\u error
函数将检索MySQL错误消息。在这种情况下,如果发生错误,mysqli_查询将返回FALSE。这段代码实际上可以检查mysqli_查询返回的值,并确定语句执行是否成功,而不是将它的小指放在嘴角,邪恶博士式的“我只是认为它会按计划进行。什么?”


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

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

mysqli\u real\u escape\u string
函数是定制编写的,正好可以实现这一点。这就是它的设计目的

更好的模式是使用带有绑定占位符的准备语句


您的代码容易受到相关攻击。甚至
mysqli\u real\u escape\u string
都反对注入。请学习使用^^^+字符串值,需要引用。而存储纯文本密码也是一个大问题-no@IdontDownVote如果将它们作为绑定参数传递,则不应引用它们。如果不使用绑定,那么仅仅添加引号并不能真正修复它。如果其中一个值包含一些字符,如引号,则查询将中断。@GolezTrol我想您知道我知道这一点,以及我的评论的意图。@IdontDownVote我无法从您的评论中看出您知道这一点。现在我想知道为什么你试图给布鲁斯错误的一步,给他糟糕的建议,这实际上会与以前给出的其他(更好的)建议相冲突。
 $sqltxt = "INSERT INTO ... ";

 echo "sqltext=" . $sqltext ;

 $result2=mysqli_query($db,$sqltext);