php操纵mysqli数据库的实现方法


Posted in PHP onSeptember 18, 2016

从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 "从张三转出失败
";
  }else{
    if($mysqli->affected_rows==0){
      $error=false;
      echo "张三的钱没有变化";  
    }else{
      echo "从张三账号中转出成功!
";
    }
  }

  $sql="update zh set ye=ye+{$price} where name='lisi1'";

  $result=$mysqli->query($sql);

  if(!$result){
    $error=false;
    echo "从李四转入失败
";
  }else{
    if($mysqli->affected_rows==0){
      $error=false;
      echo "李四的钱没有变化";  
    }else{
      echo "向李四账号中转入成功!
";
    }
  }

  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(?, ?, ?)"; //语句一样值不相同情况



//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

以上这篇php操纵mysqli数据库的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
使用PHP和XSL stylesheets转换XML文档
Oct 09 PHP
require(),include(),require_once()和include_once()的异同
Jan 02 PHP
收集的php编写大型网站问题集
Mar 06 PHP
PHP中for循环语句的几种变型
Mar 16 PHP
PHP下打开URL地址的几种方法小结
May 16 PHP
用PHP+MySQL搭建聊天室功能实例代码
Aug 20 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
Linux下手动编译安装PHP扩展的例子分享
Jul 15 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
PHP简单遍历对象示例
Sep 28 PHP
PHP对称加密函数实现数据的加密解密
Oct 27 PHP
PHP 中使用explode()函数切割字符串为数组的示例
May 06 PHP
php微信公众账号开发之前五个坑(一)
Sep 18 #PHP
php中实现进程锁与多进程的方法
Sep 18 #PHP
注意!PHP 7中不要做的10件事
Sep 18 #PHP
深入理解PHP类的自动载入机制
Sep 16 #PHP
PHP实现链式操作的原理详解
Sep 16 #PHP
详解PHP中websocket的使用方法
Sep 15 #PHP
PHP简单实现上一页下一页功能示例
Sep 14 #PHP
You might like
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
php字符集转换
2017/01/23 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
python登录QQ邮箱发信的实现代码
2013/02/10 Python
Python 不同对象比较大小示例探讨
2014/08/21 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
python基础梳理(一)(推荐)
2019/04/06 Python
实例详解Python装饰器与闭包
2019/07/29 Python
python关于变量名的基础知识点
2020/03/03 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
益模软件Java笔试题
2012/03/27 面试题
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
洗煤厂厂长岗位职责
2014/01/03 职场文书
大学生关于奋斗的演讲稿
2014/01/09 职场文书
经典导游欢迎词大全
2014/01/16 职场文书
社会学专业求职信
2014/02/24 职场文书
国贸专业自荐信范文
2014/03/02 职场文书
保证书格式范文
2014/04/28 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书