12.PHP5.6.6自学笔记 mysqli扩展_第1页
12.PHP5.6.6自学笔记 mysqli扩展_第2页
12.PHP5.6.6自学笔记 mysqli扩展_第3页
12.PHP5.6.6自学笔记 mysqli扩展_第4页
12.PHP5.6.6自学笔记 mysqli扩展_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

mysqli 扩展 12 1 mysqli 简介 简介 12 1 1mysqli 扩展扩展是类的集合 是类的集合 mysqli 是代表操作 MySQL 数据库的一些类的集合 该扩展在 PHP 设置 php ini 中一旦打开 即可使用 extension php mysqli dll 其中包括的类 mysqli 类 代表 PHP 和 Mysql 数据库之间的一个连接 MySQLi STMT 类 预处理类 代表一个 prepared 语句 mysqli result 类 代表从一个数据库查询中获取的结果集 MySQLi Driver 类 MySQLi 驱动 MySQLi Warning 类 代表一个 Mysql 警告 Themysqli sql exception 类 mysqli 异常处理类 版本相关 mysqli 扩展允许我们访问 MySQL4 1 及以上版本提供的功能 5 0 以下需手工开启 所有 mysqli 文档示例使用的都是 world 数据库 mysqli 扩展的持久化连接在 PHP5 3 中被引入 安装时默认打开 12 1 2 概念相关 概念相关 持久化连接背后的思想是客户端进程和数据库之间的连接可以通过一个客户端进程来保持 重用 而不是多次的创建和销毁 这降低了每次需要创建一个新连接的开销 未使用的连接被缓 存起来并且准备随时被重用 使用持久化连接的问题在于它们可能在客户端处于不可预知的状态 比如 一个表锁可能在 客户端意外终止之前被激活 一个新的客户端进程重用这个持久化连接就会 按照原样 得到这个 连接 这样 一个新的客户端进程为了更好的使用持久化连接 就需要做任何可能的清理工作 这样就增加了对程序员的负担 自动清理功能 mysqli 扩展的持久化连接提供了内建的清理处理代码 mysqli 所做的清理工作包括 o 回滚活动的事务 o 关闭并且删除临时表 o 对表解锁 o 重置会话变量 o 关闭 prepared 语句 在 PHP 中经常发生 o 关闭处理程序 o 释放通过 GET LOCK 获得的锁 这确保了从连接池返回的持久化连接在客户端进程使用它之前处于干净的状态 mysqli 扩展通过自动的调用 C API 函数 mysql change user 来完成这个清理工作 自动清理的特性有优点也有缺点 优点是程序员不再需要担心附加的清理代码 因为它们会 自动调用 然而缺点就是代码可能会潜在的慢一点 因为每次从连接池返回一个连接都需要执行 这些清理代码 这个自动清理的代码可以通过在编译 php 时定义 MYSQLI NO CHANGE USER ON PCONNECT 来关闭 Note 支持持久化连接 mysqli 扩展在使用 MysqlNativeDriver 或 MysqlClientLibrary libmysql 时都支持持久化连接 12 1 3 特点 特点 mysqli 有了以下几个方面的提高 更好的兼容性 mysqli扩展可以很容易地使用MySQL数据库的新功能 即使MySQL数据库有了更新的版本 mysqli 扩展也能很容易地支持 全面支持面向对象的编程 mysqli 扩展是一个封装好了的类 可以直接实例化该类的对象 即使对于不熟悉面向对象编 程的编程人员来说 mysqli 也能全程支持面向过程的编程 更快的速度和更好的安全性 mysqli 扩展执行 SQL 语句的速度比 mysql 扩展快很多 mysqli 扩展支持 MySQL 新版本的密码 杂凑 PasswordHashes 和验证程序 能更好地提供应用程序的安全性 支持预准备语句 预准备语句可提高重复使用语句的性能 mysqli 扩展提供了对预准备语句的支持 改进调试功能 mysqli 扩展改进了调试功能 提高了开发效率 12 2 使用方法 使用方法 12 2 1 总述 总述 当调用 MySqli 的方法 属性 过程时 与之相关的预定义常量也开始生效 MySqli 是一种面向对象的扩展 有两种使用方法 1 面向对象的使用方法 实例化一个对象 完成调用功能实例化一个对象 完成调用功能 mysqli NEW MYSQLI localhost root volunteer 将要做的查询语句放入变量将要做的查询语句放入变量 sql中中 sql select from vol msg 执行执行sql语句 完全面向对象的语句 完全面向对象的 result mysqli query sql 2 使用传统的面向过程的方法 connect mysqli connect localhost root volunteer ordie Unaletoconnect sql select fromvol msg result mysqli query connect sql 12 2 2 确保重要的信息数据确保重要的信息数据的安全的安全 使用基于系统的用户权限来确保只有拥有了 Web 服务器守护进程的用户才能够读取此文件 如果连接远程 MySQL 服务器 记住此信息要以明文的形式进行传送 除非采取必要的措施 在传输中加密数据 还有 最好使用安全套接字层 SSL 加密 除了拥有必要解码权限的用户外 可利用脚本编码的产品对其他用户都不可读 也不影响代 码的可执行性 ZendGuard 在这方面是最好的解决方案 不过也有其他一些相同的产品 12 3 MySQLi 类类功能概述功能概述 MySQLi 类 面向对象接口 面向过程接口 描述 属性属性 变量 变量 mysqli affected rows mysqli affected rows 获取前一个 Mysql 操作的受影响行数 mysqli client info mysqli get client info 返回字符串类型的 Mysql 客户端版本信息 mysqli client version mysqli get client version 返回整型的 Mysql 客户端版本信息 mysqli connect errno mysqli connect errno 返回最后一次连接调用的错误代码 mysqli connect error mysqli connect error 返回一个字符串描述的最后一次连接调用 的错误代码 mysqli errno mysqli errno 返回最近的函数调用产生的错误代码 mysqli error mysqli error 返回字符串描述的最近一次函数调用产生 的错误代码 mysqli field count mysqli field count 返回最近一次查询获取到的列的数目 mysqli host info mysqli get host info 返回一个能够代表使用的连接类型的字符 串 mysqli protocol version mysqli get proto info 返回使用的 Mysql 协议的版本信息 mysqli server info mysqli get server info 返回 Mysql 服务端版本的信息 mysqli server version mysqli get server version 返回整型的 Mysql 服务端版本信息 mysqli info mysqli info 最近一次执行的查询的检索信息 mysqli insert id mysqli insert id 返回最后一次查询自动生成并使用的 id mysqli sqlstate mysqli sqlstate 返回前一个 Mysql 操作的 SQLSTATE 错误 mysqli warning count mysqli warning count 返回给定链接最后一次查询的警告数量 方法方法 函数 函数 mysqli autocommit mysqli autocommit 打开或关闭数据库的自动提交功能 mysqli change user mysqli change user 更改指定数据库连接的用户 mysqli character set name mysqli client encoding mysqli character set name 返回数据库连接的默认字符集 mysqli close mysqli close 关闭先前打开的数据库连接 mysqli commit mysqli commit 提交当前事务 mysqli construct mysqli connect 打开一个到 Mysql 服务端的新的连接 注 意 静态方法 mysqli debug mysqli debug 执行调试操作 mysqli dump debug info mysqli dump debug info 将调试信息转储到日志中 mysqli get charset mysqli get charset 返回对象的字符集 mysqli get connection stats mysqli get connection stats 返回客户端连接的统计信息 仅可用于 mysqlnd mysqli get client info mysqli get client info 返回字符串描述的 Mysql 客户端版本 mysqli get client stats mysqli get client stats 返回每个客户端进程的统计信息 仅可用于 mysqlnd mysqli get cache stats mysqli get cache stats 返回客户端的 zval 缓存统计信息 仅可用 于 mysqlnd mysqli get server info mysqli get server info 没有文档 mysqli get warnings mysqli get warnings 没有文档 mysqli init mysqli init 初始化 mysqli 并且返回一个由 mysqli real connect使用的资源类型 不 是在对象上 是它返回的 mysqli 对象 mysqli kill mysqli kill 请求服务器杀死一个 Mysql 线程 mysqli more results mysqli more results 检查一个多语句查询是否还有其他查询结 果集 mysqli multi query mysqli multi query 在数据库上执行一个多语句查询 mysqli next result mysqli next result 从 multi query 中准备下一个结果集 mysqli options mysqli options 设置选项 mysqli ping mysqli ping ping 一个服务器连接 或者如果那个连接 断了尝试重连 mysqli prepare mysqli prepare 准备一个用于执行的 SQL 语句 mysqli query mysqli query 在数据库上执行一个查询 mysqli real connect mysqli real connect 打开一个到 Mysql 服务端的连接 mysqli real escape string mysqli real escape string 转义字符串中用于 SQL 语句中的特殊字符 mysqli escape string 这个转换会考虑连接的当前字符集 mysqli real query mysqli real query 执行一个 SQL 查询 mysqli rollback mysqli rollback 回滚当前事务 mysqli select db mysqli select db 为数据库查询选择默认数据库 mysqli set charset mysqli set charset 设置默认的客户端字符集 mysqli set local infile default mysqli set local infile default 清除用户为 loaddatalocalinfile 命令定 义的处理程序 mysqli set local infile handler mysqli set local infile handler 设置 LOADDATALOCALINFILE 命令执行的回 调函数 mysqli ssl set mysqli ssl set 使用 SSL 建立安装连接 mysqli stat mysqli stat 获取当前系统状态 mysqli stmt init mysqli stmt init 初始化一个语句并且返回一个 mysqli stmt prepare 使用的对象 mysqli store result mysqli store result 传输最后一个查询的结果集 mysqli thread id mysqli thread id 返回当前连接的线程 ID mysqli thread safe mysqli thread safe 返回是否设定了线程安全 mysqli use result mysqli use result 初始化一个结果集的取回 12 4 预准备语句预准备语句 结合 结合 mysqli stmt 类类 为多用户调用同一 SQL 语句做事先的代码解释与缓存 预执行和提取数据的顺序 5 6 prepare bind param execute store result bind result fetch 12 4 1 概念明晰概念明晰 一 sql 语句的执行步骤 1 语法分析 分析语句的语法是否符合规范 衡量语句中各表达式的意义 2 语义分析 检查语句中涉及的所有数据库对象是否存在 且用户有相应的权限 3 视图转换 将涉及视图的查询语句转换为相应的对基表查询语句 4 表达式转换 将复杂的 SQL 表达式转换为较简单的等效连接表达式 5 选择优化器 不同的优化器一般产生不同的 执行计划 6 选择连接方式 ORACLE 有三种连接方式 对多表连接 ORACLE 可选择适当的连接方式 7 选择连接顺序 对多表连接 ORACLE 选择哪一对表先连接 选择这两表中哪个表做为源 数据表 8 选择数据的搜索路径 根据以上条件选择合适的数据搜索路径 如是选用全表搜索还是 利用索引或是其他的方式 9 运行 执行计划 使用 SQL 语言的数据库系统执行原理基本相同 包括 MySQL 等 二 预准备语句的由来 假如我们要插入很多 1000 个用户 你怎么做 for 循环 还是 mysqli 处理多条 sql no 这 些处理很慢的 php 里面有很多操作 mysql 数据库的函数 无非是把 sql 语句传递给 mysql 数据 库 真正处理 sql 语句的是 mysql mysql 数据库是要编译 sql 语句进行执行的 上面这两种操作 会对相同的 sql 语句进行多次编译 有这必要吗 程序员总是很聪明的 于是有了 mysqli 预处理 技术 mysqli 还能防止 sql 注入攻击 上述过程在 MySQL 服务器每接收到一条 SQL 语句时都被执行一遍 在多用户情况下 会 极大占用系统资源 降低运行效率 SQL 查询语句的格式固定 作为预准备语句经 MySQL 服务器编译以后缓存起来 预准备语句将准备执行的 SQL 语句就被允许存储在 MySQL 服务器上 但还没有执行 以后每次执行它时 只需要更换其中的参数即可实现相同的查询功能 三 特点 减少发送次数及进行批量传递 预编译 减少编译次数 预处理时 连接不断开 只发送数据 mysql 端进行了预编译 效率高 执行速度快 安全性高 可以防止 sql 注入 四 不适用的场合 极为灵活的组合查询 自由变量式的查询 特别是查询表 字段变化较多的情况 12 4 2 使用方法和步骤使用方法和步骤 第一步 获取预处理语句对象 prepare 一 1 使用 mysqli stmt 中的 prepare 预置语句 1 用new mysqli 实例化一个数据连接 MYSQLI NEW MYSQLI LOCALHOST MY USER MY PASSWORD WORLD 2 利用mysqli中的stmt init 方法获取一个mysqli stmt对象 STMT MYSQLI STMT INIT 3 再利用mysqli stmt对象中的prepare 方法预置一条预处理语句 STMT PREPARE SELECT DISTRICT FROM CITY WHERE NAME 一 2 使用 mysqli 中的 prepare 预置语句 推荐使用 1 用new mysqli 实例化一个数据连接 MYSQLI NEW MYSQLI LOCALHOST MY USER MY PASSWORD WORLD 2 再利用mysqli对象中的prepare 方法预置一条预处理语句 STMT MYSQLI PREPARE SELECT DISTRICT FROM CITY WHERE NAME 一 3 两个类中的 prepare 方法的区别 返回值不同 A mysqli stmt 类中的 prepare 返回值 成功时返回 TRUE 或者在失败时返回 FALSE 因为其返回值中只有成 败 没有具体的内容 所以还必须通过 stmt init 方法获取一 个 mysqli stmt 执行对象的句柄 才能用于之后的 SQL 操作 B mysqli 类中的 prepar 推荐使用 返回值 mysqli prepare 返回语句对象 如果出现错误则返回 FALSE 该方法直接返回一个语句句柄可用于进一步操作的语句 第二步 绑定参数 bind param 二 1 在上一步所做 预置语句里的 预处理语句中使用占位符号问号 表示的各有关参数 绑定到一些 PHP 变量上 一定 要注意它们的先后顺序是否正确 STMT MYSQLI PREPARE SELECT DISTRICT FROM CITY WHERE NAME 占位符形式 一一对应一一对应 变量名1 变量名2 变量名3 点位符与点位符与后面绑定语句的后面绑定语句的变量需要一一对应 如 变量需要一一对应 如 stmt mysqli prepare link INSERT INTO CountryLanguage VALUES mysqli stmt bind param stmt sssd code language official percent 二 2 绑定参数 bind param 使用 bind param 方法将需要传递给 SQL 语句的参数传递到 MySQL 服务器端 等待执行 A 面向对象风格 bool mysqli stmt bind param string types mixed mysqli stmt bind param stmt sssd code language official percent 第三步 执行预准备语句 mysqli stmt execute void 执行一个已使用 mysqli prepare 功能先前准备的查询 当执行任何带参数标记的语句时 将自 动以相应的数据取代设定变量值 如果语句是 UPDATE DELETE INSERT INTO 可以通过使用 mysqli stmt affected rows 函数 确定受影响的行的总数 如果执行的是 SELECT 结果集通过 mysqli stmt fetch 系列函数使用 面向对象风格 bool mysqli stmt execute 返回是否成功执行 返回是否成功执行 如 stmt execute 过程化风格 bool mysqli stmt execute mysqli stmt stmt 返回是否成功执行 返回是否成功执行 如 mysqli stmt execute stmt 此用法需要传递一个mysqli stmt init 返回的 statement 标识 第四步 可选 取回全部结果 store result store result 方法 取回所有查询结果 如果需要对所有记录而不只是一小部分进行处理 可以调用 mysqli stmt 对象中的 store result 方法 把所有结果一次全部传回到 PHP 程序中 这样做不仅更有效率 而且能减轻服务器的负担 store result 方法是可选的 除了读取数据不改变任何东西 注意 资源与效率的平衡 此方法在整个执行 提取过程中是可选的 使用它可以提高服务器的效率和减轻负担 但 是也会增大内存资源成本 所以必须在使用后尽快释放其占用的资源 语法 store result 面向对象风格 bool mysqli stmt store result void 过程化风格 bool mysqli stmt store result mysqli stmt stmt 提示 必须为第一个查询单独设定一个结果集 如 SELECT SHOW DESCRIBE EXPLAIN 参数 stmt 仅在过程化样式中使用 由 mysqli stmt init 返回的 statement 标识 返回值 成功时返回 TRUE 或者在失败时返回 FALSE 例句 execute query stmt execute store result stmt store result 第五步 绑定结果集 bind result 综述 绑定原理 默认情况下 SELECT 查询结果将留在 MySQL 服务器上 等待 fetch 方法把记录逐条取回 到 PHP 程序中 赋给使用 bind result 方法绑定的 PHP 变量上 在 execute 执行之后 在使用 execute 方法执行 SQL 语句完成查询之后 1 使用 mysqli stmt 对象中的 bind result 方法 把查询结果的各个数据列绑定到一些 PHP 变量上 2 然后使用 mysqli stmt 对象中的 fetch 方法把下一条结果记录读取到这些变量里 如果成功地读入下一条记录 fetch 方法返回 TRUE 否则返回 FALSE 或者已经读完所有 的结果记录返回 FALSE 预执行和提取数据的顺序 prepare bind param execute store result bind result fetch num rows 属性 获取查询结果的记录数 如果获取 SELECT 语句查找到了多少条记录 可以从 mysqli stmt 对象中的 num rows 属性中检索出来 但是 这个属性只有在提前执行过 store result 方法 将全部查询结果传回到 PHP 程 序中的情况下才可以使用 bind result 将结果绑定到指定变量上 bind result 将结果集的参数表绑定到自定义变量上 该绑定语句必须放在执行 mysqli stmt execute 之后 mysqli stmt fetch 之前 如果 未将列绑定到指定变量 mysqli stmt fetch 将简单地忽略数据获取操作 绑定的变量表里的类型会根据 SQL 查询语句返回的结果自动转换 可以在任何时候绑定或再绑定列 即使已部分检索了结果集后也同样 新的绑定将在 下一次调用 mysqli stmt fetch 时起作用 语法 bind result 面向对象风格 bool mysqli stmt bind result mixed 第六步 fetch 取数据 从 mysqli stmt bind result 绑定的变量中提取结果 语法 面向对象风格 bool mysqli stmt fetch void 过程化风格 bool mysqli stmt fetch mysqli stmt stmt 参数 stmt 仅在过程化样式中使用 由 mysqli stmt init 返回的 statement 标识 返回值 范例 Example 1 面向对象风格 stmt execute bind result variables stmt bind result name code fetch values while stmt fetch 12 4 3 预备语句完整例程 预备语句完整例程 面向对象风格 prepare query execute statement stmt execute bind result variables stmt bind result name code fetch values while stmt fetch printf s s n name code close statement stmt close close connection mysqli close 过程化风格 12 5 释放资源释放资源 free 未指定参数的未指定参数的new mysqli mysqli connect localhost mysql user mysql pwd 连接指定的连接指定的MySQL数据库服务器数据库服务器 mysqli select db mylib 选择特定的数据库选择特定的数据库 缺点 无法设置任何 MySQL 特有的连接选项 语法 mysqli construct 面向对象风格 mysqli construct string host ini get mysqli default host string username ini get mysqli default user string passwd ini get mysqli default pw string dbname int port ini get mysqli default port string socket ini get mysqli default socket 过程化风格 mysqli mysqli connect string host ini get mysqli default host string username ini get mysqli default user string passwd ini get mysqli default pw string dbname int port ini get mysqli default port string socket ini get mysqli default socket 参数 mysqli connect host IP 地址 或主机名 如 localhost 如果可能的话 管道将代替 TCP IP 协议 username MySQL 用户名 passwd 连接密码 dbname 选择数据名 port MySQL server 接口号 默认 3306 socket 指定套接字或命名管道 12 6 2 执行一次查询 执行一次查询 mysqli query 对数据库执行一次查询 语法 query 面向对象风格 mixed mysqli query string query int resultmode MYSQLI STORE RESULT 过程化风格 mixed mysqli query mysqli link string query int resultmode MYSQLI STORE RESULT 特别提示 不能用于 INSERT UPDATE or DELETE 命令 参数 link 仅以过程化样式 由 mysqli connect 或 mysqli init 返回的链接标识 query 查询语句字串 resultmode 返回模式 用预定义常量来表示 MYSQLI STORE RESULT 默认 使用缓存的结果集 返回结果集的缓存对象 MYSQLI USE RESULT MYSQLI ASYNC 返回值 失败时返回 FALSE 通过 mysqli query 成功执行 SELECT SHOW DESCRIBE 或 EXPLAIN 查询会返回 一个 mysqli result 对象 其他查询则返回 TRUE 例句 query result mysqli query SELECT Name FROM City LIMIT 10 result mysqli query SELECT FROM City MYSQLI USE RESULT result mysqli query link SELECT FROM City MYSQLI USE RESULT mysqli query link SET a this will not work 12 6 3 单次查询单次查询 mysqli real query 执行一个 mysql 查询 说明 real query 面向对象风格 bool mysqli real query string query 过程化风格 bool mysqli real query mysqli link string query 执行一个单条数据库查询 其结果可以使用 mysqli store result 或 mysqli use result 检索或 存储 为了确定给定的查询是否真的返回一个结果集 可以查看 mysqli field count 参数 link 仅以过程化样式 由 mysqli connect 或 mysqli init 返回的链接标识 query 查询字符串 查询中的数据可以进行属性转义 返回值 成功时返回 TRUE 或者在失败时返回 FALSE 参见 mysqli query 对数据库执行一次查询 mysqli store result Transfers a result set from the last query mysqli use result Initiate a result set retrieval 12 6 4 传送查询结果传送查询结果 mysqli store result 传送一个最后的查询中的结果集 语法 面向对象风格 mysqli result mysqli store result int option 过程化风格 mysqli result mysqli store result int option 参数 link 仅以过程化样式 由 mysqli connect 或 mysqli init 返回的链接标识 option 可设置的预定义常量选项 MYSQLI STORE RESULT COPY DATA 当传输大的结果集使用 mysqli store result 这显得尤为重要 返回值 一个结果集对象或者 FALES 查询失败 例句 l result mysqli link store result 12 6 5 mysqli use result 结果集检索结果集检索 功能说明 mysqli use result 本身不检索任何行 而只是启动一个逐行的检索 就是说必须对每行调用 mysqli fetch array 来自己完成 MYSQLI USE RESULT 有着较低的内存需求 因为只需给每次处理的单行分配足够的空间 这 样速度就较快 因为不必为结果集建立复杂的数据结构 另一方面 MYSQLI USE RESULT 把较大的负载加到了服务器上 它必须保留结果集中的行 直到客户机看起来适合检索所有的行 特别标注 与 real query 方法和 more result 配合 该语句一般与 real query 方法和 more result 配合 来进行持续的检索 real query 方法 use result 方法 mysqli fetch array more result 循环 明显缺点 无法确定所返回结果集的类型 无法确定集合中的记录总数 也无法向后导航或跳到某条记 录 注意 资源与负载平衡 该函数不传递 mysqli use result 从数据库的整个结果集 因此不能使用如移动集内的特定行 mysqli data seek 的功能 要使用此功能 该结果集必须使用 mysqli store result 存储 如果在客户端 不应该大量使用 mysqli use result 进行处理 因为这会占用服务器和防止其 他线程更新任何表的数据被读取 语法use result 面向对象风格 mysqli result mysqli use result void 过程化风格 mysqli result mysqli use result mysqli link 返回值 返回一个无缓冲的结果对象或 FALES 12 7 多语句查询多语句查询 multi query 一次执行多条 SQL 命令 12 7 1 具体做法具体做法 把多条 SQL 命令写在同一个字符串里作为参数传递给 multi query 方法 多条 SQL 之间使用 分号 分隔 如果第一条 SQL 命令在执行时没有出错 这个方法就会返回 TRUE 否则将返回 FALSE 每条 SQL 命令都可能返回一个结果 在必要时需要获取每一个结果集 12 7 2 对该方法返回结果的处理对该方法返回结果的处理 读取结果集 use result 或 store result 第一条查询命令的结果要用mysqli对象中的use result 或store result 方法来读取 当然 使用 store result 方法将全部结果立刻取回到客户端 这种做法效率更高 判断有无更多 more results 另外 可以用 mysqli 对象中的 more results 方法检查是否还有其他结果集 取得下一个结果集 next result 如果想对下一个结果集进行处理 应该调用 mysqli 对象中的 next result 方法 获取下一 个结果集 这个方法返回 TRUE 有下一个结果 或 FALSE 循环第 步 如果有下一个结果集 也需要使用 use result 或 store result 方法来读取 注意 查错属性只显示第一条查询的正确性 multi query 方法的返回值 以及 mysqli 的属性 errno error info 等只与第一条 SQL 命令有 关 无法判断第二条及以后的命令是否在执行时发生了错误 所以在执行 multi query 方法 的返回值是 TRUE 时 并不意味着后续命令在执行时没有出错 12 7 3 多查询方法多查询方法 multi query 执行一个或多个查询由一个分号串联 所得的第一个查询结果集使用 mysqli use result or mysqli store result 获取 后续的结果集 使用 mysqli more results and mysqli next result 获取 语法 面向对象风格 bool mysqli multi query string query 过程化风格 bool mysqli multi query mysqli link string query 参数 link 仅以过程化样式 由 mysqli connect 或 mysqli init 返回的链接标识 query 查询语句字串 多语句用 隔开 注意正确的转义 返回值 第一条 SQL 命令在执行时没有出错 这个方法就会返回 TRUE 否则将返回 FALSE 12 7 4 more results 判断有无更多结果判断有无更多结果 从多查询里检查是否有任何更多的查询结果 语法 more results 面向对象风格 bool mysqli more results void 过程化风格 bool mysqli more results mysqli link 参数 link 仅以过程化样式 由 mysqli connect 或 mysqli init 返回的链接标识 返回值 如果有更多的结果集 返回 TRUE 否则返回 FALES 12 7 5 next result 获取更多结果集获取更多结果集 准备 multi query 的下一个结果集 语法 next result 面向对象风格 bool mysqli next result void 过程化风格 bool mysqli next result mysqli link 参数 link 仅以过程化样式 由 mysqli connect 或 mysqli init 返回的链接标识 返回值 成功时返回 TRUE 或者在失败时返回 FALSE 12 7 6 多查询完整例程 多查询完整例程 代码 php mysqli new mysqli localhost mysql user mysql pwd demo 连接 MySQL 数据库 if mysqli connect errno 检查连接错误 printf 连接失败 s mysqli connect error exit 将三条 SQL 命令使用分号 分隔 连接成一个字符串 query SET NAMES GB2312 设置查询字符集为 GB2312 query SELECT CURRENT USER 从 MySQL 服务器获取当前用户 query SELECT name phone FROM contactinfo LIMIT 0 2 从 contactinfo 表中读取数据 if mysqli multi query query 执行多条 SQL 命令 do if result mysqli store result 获取第一个结果集 while row result fetch row 遍历结果集中每条记录 foreach row as data 从一行记录数组中获取每列数据 echo data 输出每列数据 echo 输出换行符号 result close 关闭一个打开的结果集 if mysqli more results 判断是否还有更多的结果集 echo 输出一行分隔线 while mysqli next result 获取下一个结果集 并继续执行循环 mysqli close 关闭 mysqli 连接 输出结果如下所示 mysql user localhost 高某某洛某某12 8 解析结果数据的方法解析结果数据的方法 解析 解析 执行查询并准备了结果集之后 就可以开始解析了 通过 解析 可以操作结果数据 但此 操作在不使用 SQL 语句的情况下 不会影响数据库里的内容 解析的内容包括 解析的内容包括 从结果集中获取需要的记录 字段信息以及整个表的属性等 解析的四个方法 解析的四个方法 mysqli 接口在结果集对象中也提供了 fetch row fetch array fetch assoc 和 fetch object 四个彼此很相似的方法来依次读取结果数据行 这四个方法只在引用字段的方式上有差别 它们的共同点是 每次调用将自动返回下一条结 果记录 如果已经到达结果数据表的末尾 则返回 FALSE PHP5 之后的分类 之后的分类 fetch 早期版本带有 fetch 的方法 在 PHP5 以后 均已从 mysqli 的类中分离 目前 v5 6 6 有关 fetch 的方法分布如下 存在于 mysqli stmt 类中 mysqli stmt fetch 从预准备语句的执行结果中取出结果数据到绑定变量中 存在于 mysqli result 类中 mysqli result fetch all 提取所有结果行作为一个关联数组 数字数组 或两者皆有 mysqli result fetch array 提取结果中的一行作为一个关联数组 数字数组 或两者皆有 mysqli result fetch assoc 提取结果中的一行作为关联数组 mysqli result fetch field direct 从一个指定的列中获得类的详细信息 mysqli result fetch field 从结果集中获得某一个字段的信息 mysqli result fetch fields 从结果集中获得全部字段的信息 mysqli result fetch object 将以一个对象的形式返回一条结果记录 mysqli result fetch row 将以一个普通索引数组的形式返回一条结果记录 12 8 1 结果行结果行 索引数组索引数组 result fetch row 字段值 num 该方法从结果集中获取一条结果记录 将值存放在一个索引数组中 与其他三个方法相比是 最方便的方法 它的各个字段需要以 row n 的方式访问 其中 row 是从结果集中获取的一行记录返回的数 组 n 为连续的整数下标 因为返回的是索引数组 所以还可以和 list 函数结合在一起使用 语法 fetch row 面向对象风格 mixed mysqli result fetch row void 过程化风格 mixed mysqli fetch row mysqli result result 参数 result 仅以过程化样式 由 mysqli query mysqli store result 或 mysqli use result 返回 的结果集标识 返回值 返回的是索引数组或 NULL 表示后面没有数据了 Note NULL 字段 此函数将 NULL 字段设置为 PHP NULL 值 12 8 2 结果行结果行 关联数组关联数组 fetch assoc 字段值 字段名 该方法将以一个关联数组的形式返回一条结果记录 数据表的字段名表示键 字段内容表示值 echo row uid echo row name echo row departmentId echo row address echo row phone echo row email 语法 fetch assoc 面向对象风格 array mysqli result fetch assoc void 过程化风格 array mysqli fetch assoc mysqli result result Note 大小写敏感 此函数返回的字段名大小写敏感大小写敏感 Note NULL 字段 此函数将 NULL 字段设置为 PHP NULL 值 参数 result 仅以过程化样式 由 mysqli query mysqli store result 或 mysqli use result 返回的结果 集标识 12 8 3 结果集结果集 数组数组 fetch array 将结果集的各条记录获取为一个关联数组或数值索引数组 或者同时获取为关联数组和索引数 组 默认情况下 会同时获取这两种数组 可以通过在该方法的参数中传入如下不同的值来修改这种默认行为 MYSQLI ASSOC 记录被作为关联数组返回 字段名为键 字段内容为值 MYSQLI NUM 记录被作为索引数组返回 按查询中指定的字段名顺序排序 MYSQLI BOTH 这是默认值 记录即作为关联数组又作为索引数组返回 因此 每个字段 可以根据其索引偏移引用 也可以根据字段名来引用 特别提示 尽量不用 如果没有特殊要求 尽量不要去

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论