php mysqli预处理

admin3个月前软件教程58

今天我们来聊一下关于 PHP mysqli 的预处理功能,预处理这个概念在很多编程语言里都有涉及,那么在 PHP 中,它到底是什么呢?

简单的说,预处理就是将 SQL 语句和参数分离,分别进行处理。其中 SQL 语句会在连接时进行编译处理,参数则会在执行时进行传递,这样就能够有效减少 SQL 注入的风险,并提高数据库操作的执行效率。

接下来我们来看看一个具体的使用示例吧。

<?php$mysqli = new mysqli("localhost", "user", "password", "mydatabase");/* 检查连接是否成功 */if ($mysqli->connect_errno) {printf("连接失败: %s\n", $mysqli->connect_error);exit();}/* 创建预处理语句 */$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?, ?)");/* 绑定参数 */$stmt->bind_param("si", $name, $age);/* 设置参数 */$name = "Tom";$age = 21;/* 执行查询 */$stmt->execute();/* 关闭预处理语句 */$stmt->close();/* 关闭连接 */$mysqli->close();?>

在上面的代码中,我们首先连接到了数据库,然后创建了一个预处理语句,该语句是对 users 表进行添加操作的 SQL 语句,其中使用了两个占位符,分别表示 name 和 age 参数。

接着,我们使用 bind_param 方法将变量 $name 和 $age 绑定到了占位符上,这里的第一个参数指定了要绑定的参数类型,si 表示 $name 是一个字符串,$age 是一个整数,这是由于占位符可以是不同的类型,我们需要在绑定时指定正确的参数类型。

最后,我们将变量 $name 和 $age 设置为对应的值,然后执行预处理语句。

从上面的代码可以看出,预处理语句确实比普通的 SQL 语句更加灵活和安全。那么,接下来我们再来看一下 mysqli 预处理的其他一些特性吧。

首先是参数绑定,我们在上面的例子中已经看到了如何绑定参数了。对于 mysqli 预处理来说,参数类型可以是以下几种:

  • b - 二进制数据
  • d - 双精度浮点数
  • i - 整数
  • s - 字符串

然后是查询结果的绑定,mysqli 预处理还支持将查询结果绑定到变量上,示例代码如下:

<?php$mysqli = new mysqli("localhost", "user", "password", "mydatabase");/* 检查连接是否成功 */if ($mysqli->connect_errno) {printf("连接失败: %s\n", $mysqli->connect_error);exit();}/* 创建预处理语句 */$stmt = $mysqli->prepare("SELECT name, age FROM users WHERE id=?");/* 绑定参数 */$stmt->bind_param("i", $id);/* 设置参数 */$id = 10;/* 绑定查询结果 */$stmt->bind_result($name, $age);/* 执行查询 */$stmt->execute();/* 获取查询结果 */$stmt->fetch();/* 输出查询结果 */printf("%s is %d years old.", $name, $age);/* 关闭预处理语句 */$stmt->close();/* 关闭连接 */$mysqli->close();?>

在上面的例子中,我们绑定了查询结果到变量 $name 和 $age 上,并在最后输出了查询结果。这里需要注意的是,我们在绑定查询结果时使用了 bind_result 方法,它可以将查询结果绑定到指定的变量上,以供后续操作使用。

最后,我们再来看一下 mysqli 预处理的批量操作功能,示例代码如下:

<?php$mysqli = new mysqli("localhost", "user", "password", "mydatabase");/* 检查连接是否成功 */if ($mysqli->connect_errno) {printf("连接失败: %s\n", $mysqli->connect_error);exit();}/* 创建预处理语句 */$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?, ?)");/* 绑定参数 */$stmt->bind_param("si", $name, $age);/* 设置参数 */$users = array(array("Tom", 21),array("Alice", 22),array("Bob", 23));/* 执行批量添加 */foreach ($users as $user) {/* 设置参数 */$name = $user[0];$age = $user[1];/* 执行查询 */$stmt->execute();}/* 关闭预处理语句 */$stmt->close();/* 关闭连接 */$mysqli->close();?>

在上面的例子中,我们将插入操作进行了批量处理,具体实现是使用了 foreach 循环来遍历要添加的用户列表,然后依次对每个用户执行预处理语句。这里需要注意,预处理语句只需要创建一次,然后多次使用即可。

通过以上示例,我们可以看到 mysqli 预处理的功能非常强大,它可以有效的防止 SQL 注入攻击,大大提高了数据库操作的执行效率,同时还支持参数绑定、查询结果绑定以及批量操作等多种功能。

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

芒果tv闪退是怎么回事

芒果tv闪退的原因如下:1、可能是手机内存不够了,卸载手机上没用的软件。2、可能是app数据缓存已满,建议进行清理,然后打开试试。3、还有可能是版本导致的,建议下载安装芒果tv客户端最新版尝试。4、也...

头条发视频怎么赚收益

头条发视频赚收视频发表后,是以观看数量以及点赞人数赚取收益的,查看收益数据即可。另外,今日头条在手机端App上发布视频是没有收益的。今日头条是北京字节跳动科技有限公司开发的一款基于数据挖掘的推荐引擎产...

oracle 1 =null

Oracle是一款很受欢迎的数据库管理系统,它的数据类型很多,其中包括了NULL类型。NULL是用来表示可以没有值的情况,但是有时候我们需要对NULL进行比较,比如1=NULL。这样的比较在Oracl...

美团可以同时在两个手机上登录吗

同一个美团账号,不可以在两个手机上同时登录。可以是手机和电脑板同时在线,但不可以两个手机都登录,一个登录另一个会强制下线,同一个美团账号,支持用两个手机登录,但不得同时在线的。美团网在河北省省会石家庄...

python相关工作岗位

对于Python开发者来说,现在工作岗位市场的需求极为火爆。从Web开发到数据科学,从机器学习到AI,Python都是最受欢迎的工具之一。以下是几种与Python相关的工作岗位:Python开发工程师...

拼多多不发货的后果

拼多多不发货的后果是会被判超时发货,虚假发货。拼多多是上海寻梦信息技术有限公司于2015年9月上线的一家专注于C2B拼团的第三方社交电商平台。用户通过发起和朋友、家人、邻居等的拼团,以更低的价格,拼团...