加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 13:57:56 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试创建一个SQL查询来将用户信息插入数据库. $fname和$lname变量包含正确的值(“John”和“Doe”),但查询失败.这是我的代码: $fname = $_POST['first_name'];$lname = $_POST['last_name']; $sql = "INSERT INTO users (fname,lname) VALUES ($fname
我正在尝试创建一个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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读