从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. 带百分号的数据转json

    今天处理前后数据传输的时候遇到了问题. 前台拼参数是这样写的 '&rowData=' + JSON.stringify(rowData); 后台解析出的对象却总是null,而且没有抛Parse ...

  2. spring源码学习之【准备】cglib动态代理例子

    一:委托者 package com.yeepay.porxy.cglib.test; import java.util.HashMap; import java.util.Map; /** * 目标类 ...

  3. Python如何规定对方输入的数字必须是整数?

    可以使用字符串str的isdigit方法判断字符串是否是一个仅有数字组成,也就是整数.如果是整数退出while循环,否则继续请求输入. 1 2 3 4 5 6 while True:     x =  ...

  4. 【转】win7 uac关闭

    方法1: 原文网址:http://jingyan.baidu.com/article/c275f6bae2650ce33d756795.html 首先点击开始,并在输入框中输入“MSCONFIG”,打 ...

  5. unity, 用unity profiler进行真机profile,需要退出360

    用unity profiler进行真机profile,需要退出360.

  6. 关于c语言char类型输入输出的一个bug

    题目 输入一个整数n,接下来n行每一行输入两个用一个空格分隔的字符. 对每一对字符,比较其大小关系并输出比较的结果:1.0.-1. 解决的代码如下: #include<stdio.h> i ...

  7. Android 异步加载解决方案

    Android的Lazy Load主要体现在网络数据(图片)异步加载.数据库查询.复杂业务逻辑处理以及费时任务操作导致的异步处理等方面.在介绍Android开发过程中,异步处理这个常见的技术问题之前, ...

  8. maven Spring 4.2+SpringMVC+dubbo解决TypeProxyInvocationHandler.invoke(SerializableTypeWrapper.java:239)

    java.lang.NullPointerException org.springframework.core.SerializableTypeWrapper$TypeProxyInvocationH ...

  9. asp.net中virtual和abstract的区别

    这篇文章主要介绍了asp.net中virtual和abstract的区别,较为详细的分析了virtual与abstract的概念与具体用法,并以实例的形式予以总结归纳,需要的朋友可以参考下 本文实例分 ...

  10. 数据库连接工具类——包含取得连接和关闭资源 ConnUtil.java

    package com.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepare ...