mysqli预处理和事务处理


1


应用环境


mysqli预处理功能(大量数据处理时使用)


2


步骤


a)mysqli连接数据库


$mysqli = new mysqli(‘localhost‘,‘root‘,‘root‘,‘chuanzhi‘);


b)设置编码


$mysqli->set_charset(‘gb2312‘);


c)发送query语句


使用$mysqli->prepare($query)这个方法表示是预处理,如果涉及到取值,必须指定查询字段

$query = "select id,proName,proClass,proPrice from product where id>?";

$stmt = $mysqli->prepare($query);


d)提供条件


比如上句用了?作为不确定的值,就需要指定

$stmt->bind_param(‘i‘, $id);        用变量绑定?表示的值,i表示整型,d表示浮点型,b代表二进制,s代表其它的所有

$id=‘1‘;                                指定变量的值

$stmt->execute();                发送变量,此时服务器的语句已经完整了


e)从sql服务器中取回结果


预处理语句会将结果集保存在sql开辟的内存中,php开辟的内存无法直接使用(count是php函数,不是sql函数,无法直接与sql内存交互),默认情况是每次执行fetch()会从sql内存中取出一行,但是不使用store_result()就无法获取行数.当然如果你的结果只有一行,可以无视这一句.请记住:在mysqli预处理中取出数据,只能使用fetch()这是因为mysqli_stmt类并没有其它取值方法

$stmt->store_result();//如果用变量接收的话,会发现成功了显示1,否则显示0


f)获取结果集行数


$count = $stmt->num_rows();


g)绑定结果集需要输出的字段


$stmt->bind_result($id,$proName,$proClass,$proPrice);        名字无所谓,反正按顺序对应query的字段,变量个数要和query字段个数一致


h)输出结果


前面说了,既然要取值,当然前面query指定了查询字段,上句的变量用上了


i)


你懂的,关闭mysqli链接

事务处理


1


应用环境


对于安全比较在意的时候使用


2


步骤


MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!


a)连接数据库和设置编码


不用说,当然是连接数据库和设置编码了,mysql和mysqli都支持事务处理


b)关闭自动提交


$mysqli->autocommit(false);在sql的客户端里面用set autocommit = 0;


c)开启事务


开启一个事务start transation(mysql中才有这一句,mysqli不需要这一句);


d)执行sql语句


e)判断执行结果是否是自己想要的


如果是,就提交$mysqli->commit();

否则,回滚$mysqli->rollback();


f)开启自动提交


$mysqli->autocommit(true);        //个人认为这句并不是必须的,因为页面执行完,会回到初始状态,也就是自动提交状态


g)关闭数据库连接


$mysqli->close();

时间: 2024-10-13 00:53:01

mysqli预处理和事务处理的相关文章

php+mysqli预处理技术实现添加、修改及删除多条数据的方法

本文实例讲述了php+mysqli预处理技术实现添加.修改及删除多条数据的方法.分享给大家供大家参考.具体分析如下: 首先来说说为什么要有预处理(预编译)技术?举个例子:假设要向数据库添加100个用户,按常规思路,就是向数据库发送100个执行请求,此时,按照 mysql 数据库的工作原理,它需要对每一条执行语句进行编译(这里就有100次).所以,这里的效率是非常低的. 预处理(预编译)技术的作用,就是减少编译的次数和时间,以提高效果.通过一个案例来说明,预处理(预编译)技术是如何做到的(好吧,先

MYSQLI:mysqli预处理语句

应用环境 mysqli预处理功能(大量数据处理时使用) 步骤   a)mysqli连接数据库 $conn= new mysqli('localhost','root','123456','apple'); b)设置编码 $conn->set_charset('utf8'); c)发送query语句 使用$conn->prepare($sql)这个方法表示是预处理,如果涉及到取值,必须指定查询字段 $sql = "select * from product_info where pro

MySQLi面向对象实践---事务处理

在看这篇博客的时候,如果你有什么疑惑吗,可以参照一下这两篇博客 MySQLi面向过程实践---事务处理http://www.cnblogs.com/-beyond/p/7577232.html PDO实现事务处理http://www.cnblogs.com/-beyond/p/7551177.html MySQLi面向对象的事务处理涉及以下三个函数 public bool mysqli::begin_transaction ([ int $flags [, string $name ]] ) b

mysqli 预处理

应用环境 mysqli预处理功能(大量数据处理时使用) 步骤   a)mysqli连接数据库 $conn= new mysqli('localhost','root','123456','apple'); b)设置编码 $conn->set_charset('utf8'); c)发送query语句 使用$conn->prepare($sql)这个方法表示是预处理,如果涉及到取值,必须指定查询字段 $sql = "select * from product_info where pro

PHP 对MySQLI预处理的包装

mysql 类 <?php class Mysql { private static $instance; private $link; private $query; private $stmt; private $param; // 初始化 private function __construct() { $this->link = @new mysqli('localhost', 'root', 'chenshuo90909', 'temp'); if(mysqli_connect_er

MySqli预处理

预处理是先提交SQL语句到服务端,执行预编译, 客户端执行SQL语句时,只需要上传输入参数即可. 如果涉及多次读取或存储,效率高于普通SQL执行操作. 1.普通SQL执行 <?php header('content-type:text/html;charset=utf-8'); $mysqli=new mysqli('localhost','root','','test'); $mysqli->query('set names utf8'); $sql="INSERT INTO us

MySQLi面向过程实践---预处理

MySQLi预处理涉及到以下几个函数: mysqli_stmt mysqli_prepare ( mysqli $link , string $query ) bool mysqli_stmt_bind_param ( mysqli_stmt $stmt , string $types , mixed &$var1 [, mixed &$... ] ) bool mysqli_stmt_execute ( mysqli_stmt $stmt ) bool mysqli_stmt_close

php mysqli扩展之预处理

在前一篇 mysqli基础知识中谈到mysqli的安装及基础操作(主要是单条sql语句的查询操作),今天介绍的是mysqli中很重要的一个部分:预处理. 在mysqli操作中常常涉及到它的三个主要类:MySQLi类,MySQL_STMT类,MySQLi_RESULT类.预处理主要是利用MySQL_STMT类完成的. 预处理是一种重要的 防止SQL注入的手段,对提高网站安全性有重要意义. 本文案例为 数据库名为test,数据表名为test,  字段有id ,title 两个,id自增长主键. 使用

mysqli 操作数据库(转)

从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加 i表示改进的意思 功能多.效率高.稳定 编译时参数: ./configure --with-mysql=/usr/bin/mysql_config \ #使用 Mysql ClientLibrary(libmysql)构建 --with-mysqli=mysqlnd \ #使用 Mysql Native Dirver 即mysqlnd --with-pdo-mysql=mysqlnd #使用 Mysql Native