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

mysqli插入错误语法不正确

mysqli插入错误语法不正确

RISEBY 2019-11-04 10:56:47
我知道很多人偶尔也会遇到相同的错误,但是我已经查看了所有先前的答案和我的代码,并且尝试了使用col和不使用反引号。这是我目前尝试使用的代码$var,$var但同样if(!empty($_POST['email'])){ $date = date('dmY'); #Todays Date $ip = str_replace('.','',$_SERVER['REMOTE_ADDR']); #Visitor IP $verify = md5($date.$ip); #MD5 ENCRYPT THE 2 VALUES $fname = $_POST['fname']; $lname = $_POST['lname'];   $email = $_POST['email']; $password = md5($_POST['password']); $link = mysqli_connect($dbh,$dbu, $dbp, $dbn); $query = mysqli_query($link, "INSERT INTO `users` (`email`,`fname`,`lname`,`verify`,`password`,`joined`)VALUES($email,$fname,$lname,$verify,$password,$date)"); if($query){   echo "inserted";  } else {   echo mysqli_error($link); }该表中还有其他列,但是只有上面的我想为其余部分添加数据的列可以最初使用默认值我一直在看这段代码很久了,现在我才发现问题,我知道这很愚蠢
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

将变量添加到SQL查询中的最防错的方法是通过准备好的语句添加变量。


因此,对于您运行的每个查询,如果至少要使用一个变量,则必须用占位符替换它,然后准备查询,然后执行它,并分别传递变量。


首先,您必须更改查询,在变量中添加占位符。您的查询将变为:


$sql = "INSERT INTO users (fname, lname) VALUES (?, ?)";

然后,您将必须准备它,绑定变量并执行:


$stmt = mysqli_prepare($conn, $sql);

mysqli_stmt_bind_param($stmt, "ss", $fname, $lname);

mysqli_stmt_execute($stmt);

如您所见,这只是三个简单的命令:


prepare()您使用占位符发送查询的位置

在bind_param中,您发送带有类型的字符串(“ s”用于字符串,并且可以将其实际用于任何类型),而不是实际变量。

和execute()

这样,您始终可以确保添加到查询中的数据不会引起单个SQL语法错误!另外,此代码还可以防止SQL注入!


理解仅在变量周围加上引号是不够的,这将非常重要,并最终会导致无数问题,从语法错误到SQL注入。另一方面,由于预准备语句的本质,它是一种防弹解决方案,无法通过数据变量引入任何问题。


查看完整回答
反对 回复 2019-11-04
?
炎炎设计

TA贡献1808条经验 获得超4个赞

您的查询缺少值(..'$email','$fname'..")的引号。但是您很容易使用SQL注入。将准备好的语句与参数化查询一起使用 

查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 442 浏览
慕课专栏
更多

添加回答

举报

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