如何在PHP脚本中正确构建SQL查询?
我正在尝试创建一个SQL查询来将用户信息插入数据库. $fname和$lname变量包含正确的值(“John”和“Doe”),但查询失败.这是我的代码:
$fname = $_POST['first_name']; $lname = $_POST['last_name']; $sql = "INSERT INTO users (fname,lname) VALUES ($fname,$lname)"; mysqli_query($conn,$sql); 检查错误消息后,我发现此查询失败,并显示错误说
如何正确地将变量包含到SQL查询中以使其运行而没有错误? >这个问题不是关于我非常熟悉的SQL语法,而是关于使用PHP脚本中的变量动态创建查询的规则.
将变量添加到SQL查询中的最具防误的方法是通过准备语句添加变量.
非常重要的是要明白,只需在变量上添加引号是不够的,最终会导致无数的问题,从语法错误到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()在那里你发送查询与占位符 这样,您可以始终确保您添加到查询中的数据不会导致单个SQL语法错误!作为一个奖励,这个代码是针对SQL注入的防弹! 有一点盐,虽然运行一个SELECT查询与mysqli准备的语句可能会更复杂.所以我强烈建议选择PDO作为您的数据库驱动程序for many reasons. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |