mysqli扩展的使用方式

上传人:飞*** 文档编号:39983196 上传时间:2018-05-21 格式:DOCX 页数:11 大小:32.88KB
返回 下载 相关 举报
mysqli扩展的使用方式_第1页
第1页 / 共11页
mysqli扩展的使用方式_第2页
第2页 / 共11页
mysqli扩展的使用方式_第3页
第3页 / 共11页
mysqli扩展的使用方式_第4页
第4页 / 共11页
mysqli扩展的使用方式_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《mysqli扩展的使用方式》由会员分享,可在线阅读,更多相关《mysqli扩展的使用方式(11页珍藏版)》请在金锄头文库上搜索。

1、在生成网页时,许多 PHP 脚本通常都会执行除参数以外,其他部分完全相 同的查询语句,针对这种重复执行一个查询,每次迭代使用不同的参数情况, MySQL 从 4.1 版本开始提供了一种名为预处理语句(prepared statement)的 机制。它可以将整个命令向 MySQL 服务器发送一次,以后只有参数发生变化, MySQL 服务器只需对命令的结构做一次分析就够了。这不仅大大减少了需要传 输的数据量,还提高了命令的处理效率。可以用 mysqli 扩展模式中提供的 mysqli_stmt 类的对象,去定义和执行参数化的 SQL 命令,mysqli_result 类中 包含的全部成员属性和成员

2、方法如表 13-6 和表 13-7 所示。表 13-6 mysqli_stmt 类中的成员方法(共 12 个)成员方法名描 述bind_param()该方法把预处理语句各有关参数绑定到一些 PHP 变量上,注意参数的先后顺序bind_result()预处理语句执行查询之后,利用该方法将变量绑定到所获取的字段close()一旦预处理语句使用结果之后,它所占用的资源可以通过该方法回收data_seek()在预处理语句中移动内部结果的指针execute()执行准备好的预处理语句fetch()获取预处理语句结果的每条记录,并将相应的字段赋给绑定结果free_result()回收由该对象指定的语句占用的

3、内存result_metadata()从预处理中返回结果集原数据prepare()无论是绑定参数还是绑定结果,都需要使用该方法准备要执行的预处理语句send_long_data()发送数据块reset()重新设置预处理语句store_result()从预处理语句中获取结果集表 13-7 mysqli_stmt 类中的成员属性(共 6 个)成员属性名描 述$affected_rows返回该对象指定的最后一条语句所影响的记录数。注意,该方法只与插入、修改和删除三种查询句有关$errno返回该对象指定最近所执行语句的错误代码$error返回该对象指定最近所执行语句的错误描述字符串$param_cou

4、nt返回给定的预处理语句中需要绑定的参数个数$sqlstate从先前的预处理语句中返回 SQL 状态错误代码$num_rows返回 stmt 对象指定的 SELECT 语句获取的记录数13.4.113.4.1 获取预处理语句对象获取预处理语句对象在设计 PHP 程序时,使用预处理语句的最大好处是有关代码可以编写得更精巧、 更易于理解,不必为各组参数分别构造一条 SQL 命令。可以使用 mysqli 对象中 的 prepare()方法准备要执行的 SQL 语句,获得一个 mysqli_stmt 对象。但要 将准备的 SQL 语句中,各有关参数替换为占位符号,通常使用问号(?)作为占 位符号。这条

5、准备执行的 SQL 语句就被允许存储在 MySQL 服务器上,但还没有 执行。mysqli_stmt 对象是后面操作的基础,获取该对象的代码如下所示:$stmt = $mysqli-prepare(“INSERT INTO tableName VALUES (?, ?, ?, ?)“); / 返回 mysqli_stmt 对象另外,还可以通过 mysqli 对象中的 stmt_init()方法获取一个 mysqli_stmt 对 象。但获取 mysqli_stmt 对象之后,还要通过该对象中的 prepare()方法去准 备一个要执行的 SQL 语句,代码如下所示:$stmt = $mysql

6、i-stmt_init(); /获取 一个 mysqli_stmt 对象$stmt-prepare (“INSERT INTO tableName VALUES (?, ?, ?, ?)“); /返回 mysqli_stmt 对象13.4.213.4.2 绑定参数绑定参数创建完 mysqli_stmt 对象并准备了一个要执行的 SQL 语句之后,接下来,需要 使用该对象中的 bind_param()方法,把在预处理语句中使用占位符号问号 (?)表示的各有关参数,绑定到一些 PHP 变量上,一定要注意它们的先后顺序 是否正确。在 bind_param()方法中,第一个参数是必需的,表示该方法中其

7、后 多个可选参数变量的数据类型。每个参数的数据类型必须用相应的字符明确给 出,表示绑定变量的数据类型字符如表 13-8 所示。表 13-8 绑定变量的数据类型字符字 符含 义i所有 INTEGER 类型dDOUBLE 和 FLOAT 类型s所有其他类型(包括字符串)b二进制数据类型(BLOB、二进制字节串)通过 bind_param()方法将变量绑定到相应的字段之后,为了实际执行的那条 SQL 命令,还需要把参数值存入绑定的 PHP 变量。绑定变量并存入数值的代码 如下所示:$stmt = $mysqli-prepare(“INSERT INTO 表名 VALUES (?, ?, ?, ?)“

8、); /获取一 个 mysqli_stmt 对象$stmt-bind_param(issd, $var1, $var2, $var3, $var4); /绑定参数,其中 issd表示 4 个变量类型$var1 = 整数值; /给第一个变量赋上整型 数值$var2 = 字符串 1; /给第二个变量赋上字符 串值$var3 = “字符串 2“; /给第三个变量赋上字符 串值$var4 = 浮点数值; /给第四个变量赋上浮点 数值在上面示例代码中,$stmt-bind_param()方法中的第一个参数“issd”,表示 绑定变量的数据类型,也就是“issd”中的四个字符按顺序表示 $var1、$va

9、r2、$var3 和$var4 变量的数据类型,并将这四个变量按顺序和 SQL 命令中四个占位符(?)对应。如果给这四个变量按相应的数据类型赋值,就相 当于在要执行的 SQL 语句中,为占位符号(?)表示的参数赋上实际的值,形成 完整的 SQL 语句。执行完成以后,如果还需要同样的操作,只需要再为参数赋 予其他的值,就不用再重复声明同样的 SQL 语句了。可以随时随地重复这个过 程。13.4.313.4.3 执行准备好的语句执行准备好的语句准备好 SQL 语句并绑定参数,把那些参数放入几个简单的 PHP 变量之后,就可 以调用 mysqli_stmt 对象中的 execute()执行了。因为绑

10、定参数的预处理语句 并没有执行过,只是存储在 MySQL 服务器上,将迭代数据重复地发送给服务器, 再将这些迭代数据集成到查询中来执行。13.4.413.4.4 回收资源回收资源等不再需要 mysqli_stmt 对象时,应该立刻明确地释放它占用的资源,可以通 过该对象中的 close()方法回收。这么做不仅从本地内存释放了这个对象,还 通知 MySQL 服务器后面不会再有这样的命令了,删除它的预处理语句。13.4.513.4.5 简单的示例分析简单的示例分析以上一节中介绍的联系人信息表 contactInfo 为例,向 demo 数据库的 contactinfo 表中连接插入多条联系记录。使

11、用预处理语句只需要声明一条 SQL 命令,并向 MySQL 服务器送一次,以后插入的记录时,只有参数发生变化即可。 代码如下所示:“, mysqli_connect_error();exit(); /声明一个 INSERT 语句,并使用$mysqli-prepare()方法对算执行的这个 SQL 命 令进行处理$query=“INSERT INTO contactInfo(name, departmentId, address, phone, email) VALUES (?, ?, ?, ?,?)“;$stmt = $mysqli-prepare($query); /处理打算执行的 SQL

12、命令/将 5 个占位符号(?)对应的参数绑定到 5 个 PHP 变量中$stmt-bind_param(sssss, $name, $departmentId, $address, $phone, $email);$name=“张某某“; /为第一个绑定的参数赋 上字符串的值$departmentId=“D03“; /为第二个绑定的参数赋 上字符串的值$address=“中关村“; /为第三个绑定的参数赋 上字符串的值$phone=“15801683721“; /为第四个绑定的参数赋上字 符串的值$email=““; /为第五个绑定的参数赋 上字符串的值$stmt-execute(); /执行

13、预处理的 SQL 命令,向 服务器发送数据echo “插入的行数:“.$stmt-affected_rows.“; /返回插入的行数echo “自动增长的 UID:“.$mysqli-insert_id.“;/返回最后生成的AUTO_INCREMENT 值/以下几条代码重新为参数赋值,可以随时重复这个过程继续插入记录。$name=“白某某“;$departmentId=“D01“;$address=“海淀区“;$phone=“15801689675“;$email=““;$stmt-execute(); /重新给参数赋值后,再次向 服务器发送数据echo “插入的行数:“.$stmt-affe

14、cted_rows.“; /返回插入的行数echo “自动增长的 UID:“.$mysqli-insert_id.“;/返回最后生成的 AUTO_INCREMENT 值$stmt-close(); /释放 mysqli_stmt 对象 占用的资源$mysqli-close(); /关闭与 MySQL 数据库的 连接?在上面的示例中,连续向 contate 表添加两条记录,也可以重复执行插入更多 的记录。采用这个办法执行完 INSERT、UPDATE 和 DELETE 命令之后,可以通过 mysqli_stmt 对象中的 affected_rows 属性返回被修改的记录个数。如果是 INSERT 语句,也可以使用 mysqli 对象中的 insert_id 属性返回最后生成的 AUTO_INCREMENT 值。13.4.613.4.6 使用预处理语句处理使用预处理语句处理 SELECTSELECT 查询结果查询结果SELECT 语句和其他的 SQL 查询命令不同,它需要处理查询结果。SQL 语句的执 行也需要使用 mysqli_stmt 对象中的 execute()方法,但与 mysqli 对象中的 query()方法不同,execute()方法的返回值并不是一个 mysqli_result 对象。 mysqli_stm

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号