如何在PHP脚本中正确构建SQL查询?

前端之家收集整理的这篇文章主要介绍了如何在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);

检查错误消息后,我发现此查询失败,并显示错误

Unknown column ‘John’ in ‘field list’

如何正确地将变量包含到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()在那里你发送查询与占位符
> bind_param你发送一个字符串类型(“s”是字符串,你可以使用它为任何类型实际上)和实际的变量.
>和execute()

这样,您可以始终确保您添加查询中的数据不会导致单个sql语法错误!作为一个奖励,这个代码是针对sql注入的防弹!

有一点盐,虽然运行一个SELECT查询MysqLi准备的语句可能会更复杂.所以我强烈建议选择PDO作为您的数据库驱动程序for many reasons.

原文链接:https://www.f2er.com/php/139352.html

猜你在找的PHP相关文章