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 相关文章推荐
基于mysql的bbs设计(三)
Oct 09 PHP
php 无限级缓存的类的扩展
Mar 16 PHP
Php 构造函数construct的前下划线是双的_
Dec 08 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
Zend Framework创建自己的动作助手详解
Mar 05 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
PHP中OpenSSL加密问题整理
Dec 14 PHP
yii2 上传图片的示例代码
Nov 02 PHP
laravel 事件/监听器实例代码
Apr 12 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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面向对象学习笔记之一 基础概念
2012/10/06 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
调用js时ie6和ie7,ff的区别
2009/08/19 Javascript
js下用eval生成JSON对象
2010/09/17 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
2015/11/30 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
[36:33]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.29
2020/12/02 DOTA
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
python Flask实现restful api service
2017/12/04 Python
python实现在线翻译功能
2020/03/03 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
Linux操作面试题
2015/02/11 面试题
会计电算化专业应届大学生求职信
2013/10/22 职场文书
奠基仪式主持词
2014/03/20 职场文书
《诚实与信任》教学反思
2014/04/10 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
JAVA API 实用类 String详解
2021/10/05 Java/Android
Java 定时任务技术趋势简介
2022/05/04 Java/Android