从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 Dirver 即mysqlnd

由于版权问题 从 php5.3开始 php开始用 mysqlnd 替代 libmysql.dll
mysqlnd 是zend公司开发的mysql数据库驱动,相比原来各方面都有所提高

#使用mysqlnd编译

./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 加上你的参数

mysqli 过程、对象方式都支持

mysqli提供的三个类:
   1、mysqli 和连接相关的
   2、MySQLi_Result 处理结果集
   3、mysqli_stmt 预处理类

#设置字符集
set_charset

#获取字符集
character_set_name

获取数据库对象

//创建mysqli对象方式 1
//屏蔽连接产生的错误
$mysqli = new mysqli('127.0.0.1', 'root', '', 'test'); //只能用函数来判断是否连接成功
if(mysqli_connect_errno())
{
echo mysqli_connect_error();
} //创建mysqli对象方式 2 可以设置一些参数
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间
$mysqli->real_connect('127.0.0.1', 'root', '', 'test'); 

query:失败返回false,select成功返回结果集对象,其他返回true 非false,意味着sql执行成功了

无结果集示例

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间
$mysqli->real_connect('127.0.0.1', 'root', '', 'test'); $sql = "insert into limove(`name`, `order`) values('aa', 11)";
$rst = $mysqli->query($sql); $sql = "delete from limove where id = 221";
$rst = $mysqli->query($sql); if($rst === false)
{
ee($mysqli->errno);
ee($mysqli->error);
} #影响条数
ee($mysqli->affected_rows);
#插入的id
ee($mysqli->insert_id); ee($mysqli);

 

有结果集

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间
$mysqli->real_connect('127.0.0.1', 'root', '', 'test'); $sql = "select * from limove as limove_as"; $result = $mysqli->query($sql);
if($result === false)
{
ee($mysqli->errno);
ee($mysqli->error);
} #行数
ee($result->num_rows); #列数
ee($result->field_count); #字段个数
ee($result->field_count); #获取所有字段的信息
$field_arr = $result->fetch_fields(); #移动字段的指针
// $result->field_seek(1); #依次获取字段的信息
while($field = $result->fetch_field())
{
ee($field);
} #移动记录指针
$result->data_seek(1); #一次获取所有数据
$data = $result->fetch_all(MYSQLI_ASSOC); #关联数组方式获取结果集
$data = array(); $result->data_seek(0); #重置指针到起始
while($row = $result->fetch_assoc())
{
$data[] = $row;
} ee($data); $result->free();
$mysqli->close();

一次 执行多条语句 multiquery (不推荐使用)

  无结果集,此时 affected_rows 只能获取到最后的那条影响的条数

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间
$mysqli->real_connect('127.0.0.1', 'root', '', 'test'); $sql_arr = array(
'insert into limove(id,`name`, `order`) values(null, 1, 2)',
'insert into limove(id,`name`, `order`) values(null, 1, 222)',
'delete from limove where `order` = 2',
); $sql = implode(';', $sql_arr); $result = $mysqli->multi_query($sql);
if($result === false)
{
ee($mysqli->errno);
ee($mysqli->error);
} $mysqli->close();

有结果集

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间
$mysqli->real_connect('127.0.0.1', 'root', '', 'test'); $sql_arr = array(
'show tables',
'desc select * from limove',
'show create table limove',
); $sql = implode(';', $sql_arr); $rst = $mysqli->multi_query($sql); if($rst === false)
{
ee($mysqli->errno);
ee($mysqli->error);
} do{
$result = $mysqli->store_result();#获取当前光标所在的结果集 $data = $result->fetch_all(); ee($data); }while($mysqli->next_result());#光标移动到下一个结果集 $mysqli->close();

事务处理:

    $mysqli=new mysqli("localhost", "root", "123456", "xsphpdb");

    //事务处理
$mysqli->autocommit(0); $error=true; $price=50; $sql="update zh set ye=ye-{$price} where name='zhangsan'"; $result=$mysqli->query($sql); if(!$result){
$error=false;
echo "从张三转出失败<br>";
}else{
if($mysqli->affected_rows==0){
$error=false;
echo "张三的钱没有变化";
}else{
echo "从张三账号中转出成功!<br>";
}
} $sql="update zh set ye=ye+{$price} where name='lisi1'"; $result=$mysqli->query($sql); if(!$result){
$error=false;
echo "从李四转入失败<br>";
}else{
if($mysqli->affected_rows==0){
$error=false;
echo "李四的钱没有变化";
}else{
echo "向李四账号中转入成功!<br>";
}
} if($error){
echo "转账成功!";
$mysqli->commit();
}else{
echo "转账失败!";
$mysqli->rollback();
} $mysqli->autocommit(1);
$mysqli->close();

mysqli_stmt:mysqli预处理类(推荐):表示了准备好的一个语句,服务器端只编译一次sql
用mysqli和mysqli_result可以实现同样的功能
优点:效率高,适用于语句相同只是数据不同的情况 ,可以阻止sql注入的产生

 mysqli_stmt示例:非select语句

require  'fns.php';

//创建mysqli对象方式
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test'); //只能用函数来判断是否连接成功
if(mysqli_connect_errno())
{
echo mysqli_connect_error();
die;
} $mysqli->set_charset('utf8'); $sql = "insert into limove values(?, ?, ?)"; //语句一样值不相同情况 /*
//获取stmt对象
$stmt = $mysqli->stmt_init(); //准备一条sql语句,放到服务器端
$stmt->prepare($sql);
*/ //mysqli中有直接的方法可用
$stmt = $mysqli->prepare($sql); //绑定参数
$stmt->bind_param('iss', $id, $name, $order); for($i=0;$i<5;$i++){
$id = 0;
$name = 'name';
$order = mt_rand(1, 1000);
$stmt->execute(); } //最后id
ee($stmt->insert_id); //影响的行数 注:最后一条执行的
ee($stmt->affected_rows); //错误号
ee($stmt->errno); //错误信息
ee($stmt->error); //stmt对象中可以看到更多的信息
ee($stmt); eee($mysqli);

 mysqli_stmt示例:select语句 1 

require  'fns.php';

//创建mysqli对象方式
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test'); //只能用函数来判断是否连接成功
if(mysqli_connect_errno())
{
echo mysqli_connect_error();
die;
} $mysqli->set_charset('utf8'); $sql = "select * from limove where id<?";
$stmt = $mysqli->prepare($sql); $stmt->bind_param('i', $i);
$stmt->bind_result($a, $b, $c); $i=40;
$stmt->execute(); //把结果都取过来
$stmt->store_result(); //获取字段信息
$result = $stmt->result_metadata();//只能获取一些字段信息
while($field = $result->fetch_field())
{
ee($field->name);
} //$stmt->data_seek(2); //移动指针的位置,只有执行 store_result 后才能生效 while($stmt->fetch()){
ee("{$a}|{$b}|{$c}");
} //记录的条数 ,只有执行 store_result 后才能生效
ee($stmt->num_rows);
ee($stmt);
$stmt->free_result();
$stmt->close();

 mysqli_stmt示例:select语句 2

<?php
require 'fns.php'; //创建mysqli对象方式
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test'); //只能用函数来判断是否连接成功
if(mysqli_connect_errno())
{
echo mysqli_connect_error();
die;
} $mysqli->set_charset('utf8'); $sql = "select * from limove where id<?";
$stmt = $mysqli->prepare($sql); $stmt->bind_param('i', $i);
$stmt->bind_result($a, $b, $c); $i=40;
$stmt->execute(); //获取结果
$result = $stmt->get_result();
$data = $result->fetch_all(MYSQLI_ASSOC); ee($data);
debug();

mysqli 操作数据库的更多相关文章

  1. php 通过mysqli 操作数据库mysql

    目录 php mysqli 操作数据库 连接数据库 通过mysqli 创建数据库 通过mysqi 创建数据表 通过mysqli向数据表中插入信息 通过mysqli 读取数据 where语句的应用 通过 ...

  2. 比Mysqli操作数据库更简便的方式 。PDO

    下面来说一下PDO 先画一张图来了解一下 mysqli是针对mysql这个数据库扩展的一个类 PDO是为了能访问更多数据库 如果出现程序需要访问其他数据库的话就可以用PDO来做 PDO数据访问抽象层1 ...

  3. mysqli操作数据库

    1 连接数据库:可以使用对象或函数来连接(我们这里主要用mysqli对象,附带着函数连接) //创建mysqli对象(也可以叫做资源句柄) $_mysqli = new mysqli(); //连接数 ...

  4. 在PHP中使用Mysqli操作数据库

    PHP的 mysqli 扩展提供了其先行版本的所有功能,此外,由于 MySQL 已经是一个 具有完整特性的数据库服务器 , 这为PHP 又添加了一些新特性 . 而 mysqli 恰恰也支持了 这些新特 ...

  5. 在PHP中使用MySQL Mysqli操作数据库 ,以及类操作方法

    先来操作函数部分,普遍的MySQL 函数方法,但随着PHP5的发展,有些函数使用的要求加重了,有些则将废弃不用,有些则参数必填... ================================= ...

  6. mysqli 操作数据库(转)

    从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加 i表示改进的意思 功能多.效率高.稳定 编译时参数: ./configure --with-mysql=/usr/bin/ ...

  7. PHP MysqlI操作数据库

    1连接数据库. //procedural style $mysqli = mysqli_connect('host','username','password','database_name'); / ...

  8. PHP MysqlI操作数据库(转)

    1连接数据库. Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter. ...

  9. MYSQLI - mysqli操作数据库

    <?php //模型类 class Model { //数据库连接 private $_conn = NULL; //where语句 private $_where = NULL; //表名称 ...

随机推荐

  1. Android—常用组件练习

    新建一个文件“practice1.xml” 编写代码如下: <?xml version="1.0" encoding="utf-8"?> <L ...

  2. java的nio之:java的nio系列教程之java的io和nio的区别

    当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们如何影响您的代 ...

  3. 常用的文件和目录操作命令【转vbird】

    cdpwdmkdirrmdirlscprmmvcattacnlmorelessheadtailtouch cd (变换目录) 我们知道vbird这个使用者的家目录是/home/vbird/,而root ...

  4. FreeSWITCH在呼叫失败的情况下播放语音提示

    看到好多网友问到这个问题.一般我们在打电话时会听到“您拨的电话正在通话中,请稍后再拨....”,或“电话无应答...”之类的提示,我们在 freeswitch 里也可以这样做. 其实很简单,默认的配置 ...

  5. 自然语言处理2.1——NLTK文本语料库

    1.获取文本语料库 NLTK库中包含了大量的语料库,下面一一介绍几个: (1)古腾堡语料库:NLTK包含古腾堡项目电子文本档案的一小部分文本.该项目目前大约有36000本免费的电子图书. >&g ...

  6. snort-2.9.7.0源码安装过程

    2015/02/15,centos6.5-64-minimal,初始205个包 [root@localhost snort]# yum install wget[root@localhost snor ...

  7. OpenJudge计算概论-字符串最大跨距

    /*====================================================================== 字符串最大跨距 总时间限制: 1000ms 内存限制: ...

  8. Openjudge计算概论-奇数单增序列

    /*===================================== 奇数单增序列 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个长度为N(不大于500)的正整数序列 ...

  9. html初学(一)

    学习了一些html的基本用法,代码和效果如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8 ...

  10. tengine安装

    下载地址: http://tengine.taobao.org/download_cn.html $tar -xvzf tengine-2.1.2.tar.gz $./configure$ make$ ...