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

表13-6  mysqli_stmt类中的成员方法(共12个)

成员方法名

描    述

bind_param()

该方法把预处理语句各有关参数绑定到一些

PHP变量上,注意参数的先后顺序

bind_result()

预处理语句执行查询之后,利用该方法将变量绑定到所获取的字段

close()

一旦预处理语句使用结果之后,它所占用的资源可以通过该方法回收

data_seek()

在预处理语句中移动内部结果的指针

execute()

执行准备好的预处理语句

fetch()

获取预处理语句结果的每条记录,并将相应的字段赋给绑定结果

free_result()

回收由该对象指定的语句占用的内存

result_metadata()

从预处理中返回结果集原数据

prepare()

无论是绑定参数还是绑定结果,都需要使用

该方法准备要执行的预处理语句

send_long_data()

发送数据块

reset()

重新设置预处理语句

store_result()

从预处理语句中获取结果集

表13-7  mysqli_stmt类中的成员属性(共6个)

成员属性名

描    述

$affected_rows

返回该对象指定的最后一条语句所影响的记录数。

注意,该方法只与插入、修改和删除三种查询句有关

$errno

返回该对象指定最近所执行语句的错误代码

$error

返回该对象指定最近所执行语句的错误描述字符串

$param_count

返回给定的预处理语句中需要绑定的参数个数

$sqlstate

从先前的预处理语句中返回SQL状态错误代码

$num_rows

返回stmt对象指定的SELECT语句获取的记录数

 
 
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name); $stmt->execute(); $result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// do something with $row
}

使用mysqli_stmt类的更多相关文章

  1. PHP的扩展类 mysqli_stmt:预处理类

    mysqli和mysqli_result能完成的功能 都可以使用mysqli_stmt类开完成 1.编译一次,使用多次,类似于存储过程 2.参数化查询,可防止sql注入 1: <?php 2: ...

  2. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  3. PHP-Mysqli扩展库的预编译

    (1)预编译的好处 假如要执行100条类似的sql语句,每一次执行,在MySQL端都会进行一次编译,效率很低.提高效率的方法就是--减少编译的次数. 先制造一个sql语句的模板,在MySQL端预先编译 ...

  4. MYSQL数据库的操作

    Mysql的连接方式: 1.原生函数:mysql_connect($server,$username,$password);   //打开一个到Mysql服务器的连接 mysql_select_db( ...

  5. mysqli预处理和事务处理

    1 应用环境 mysqli预处理功能(大量数据处理时使用) 2 步骤 a)mysqli连接数据库 $mysqli = new mysqli('localhost','root','root','chu ...

  6. mysqli_stmt预处理类的使用

  7. mysqli_stmt预处理类

    <?php  $mysqli=new mysqli("localhost", "root", "123456", "xsph ...

  8. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  9. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

随机推荐

  1. CodeForces Round 193 Div2

    I know,this is another failure.It seems like that failure is a habit with me.This time I solved two ...

  2. Gradle dsl method not found renderscriptSupportMode()

    连接: How to use the Renderscript Support Library with Gradle Android-Studio and Renderscript support ...

  3. topcoder 594 DIV2 foxandclassroom

    暴力枚举 1 #include <iostream> #include <vector> #include <string> using namespace std ...

  4. 【BZOJ】1192: [HNOI2006]鬼谷子的钱袋(水题)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1192 看到题我就好像想起以前小学升学考数学的最后一题,将一条金块分割最少的部分,使得每一天都能够支付 ...

  5. POJ 3373 Changing Digits(DP)

    题目链接 记录路径的DP,看的别人的思路.自己写的也不好,时间居然2000+,中间的取余可以打个表,优化一下. 写的各种错,导致wa很多次,写了一下午,自己构造数据,终于发现了最后一个bug. dp[ ...

  6. Android之adb异常

    Android使用adb模拟器时出现"unable to establish connection to adb"."ADB server didn't ACK" ...

  7. Android jni开发资料--NDK环境搭建

      谷歌改良了ndk的开发流程,对于Windows环境下NDK的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK.而在NDKr7开始,Google的Windows版的NDK ...

  8. QCheckBox 的按钮响应

    Qt中QCheckBox的按键响应如下,其中checkbox为对象名: void YourClass::on_checkbox_toggled(bool state) { // Do somethin ...

  9. mysql主从配置脚本

    PASSWD=123456USER=rootREP_HOST=10.10.10.70REP_PORT=3306REP_USER=slaveREP_PASSWD=123456@REP_FILE=mysq ...

  10. android之初识Intent

    首先修改values\strings.xml文件 代码如下: <resources> <string name="app_name">mytab</s ...