[英]How to construct an SQL query correctly in a PHP script?
我正在尝试创建一个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);
检查错误消息后,我发现此查询失败,并显示错误信息
“字段列表”中的未知列“ John”
如何在SQL查询中正确包含变量以使其运行而不会出现错误?
将变量添加到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);
如您所见,这只是三个简单的命令:
这样,您始终可以确保添加到查询中的数据不会引起单个SQL语法错误! 另外,此代码还可以防止SQL注入!
不过有一点麻烦,因为使用mysqli准备好的语句运行SELECT查询可能会更加复杂。 因此, 出于多种原因,我强烈建议选择PDO作为数据库驱动程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.