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企业级应用之常见缓存技术篇
Jan 27 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
Jun 19 PHP
windows7下安装php的imagick和imagemagick扩展教程
Jul 04 PHP
php使用glob函数快速查询指定目录文件的方法
Nov 15 PHP
PHP实现根据图片色界在不同位置加水印的方法
Aug 08 PHP
PHP简单的MVC框架实现方法
Dec 01 PHP
php轻松实现文件上传功能
Mar 03 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
PHP count()函数讲解
Feb 03 PHP
Yii框架数据库查询、增加、删除操作示例
Oct 14 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 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查询whois信息的方法
2015/06/08 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
phpStorm2020 注册码
2020/09/17 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
Javascript中replace()小结
2015/09/30 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
python导入时小括号大作用
2017/01/10 Python
django文档学习之applications使用详解
2018/01/29 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
用python解压分析jar包实例
2020/01/16 Python
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
物业管理应届生求职信
2013/10/28 职场文书
会计专业毕业生求职信分享
2014/01/03 职场文书
工厂车间标语
2014/06/19 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
支行行长岗位职责
2015/02/15 职场文书
教师党员个人自我评价
2015/03/04 职场文书
商场收银员岗位职责
2015/04/07 职场文书
如何做好员工培训计划?
2019/07/09 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android