PHP Mysqli 常用代码集合


Posted in PHP onNovember 12, 2016

PHP5.0开始,不仅可以使用早期的mysql数据库扩展函数,还能使用新扩展的mysqli技术实现与mysql数据库的信息交流,PHP的mysqli扩展被封装在在一个类中,它是一种面向对象技术,只能在PHP5和MYSQL4,1或更高的版本才能使用,(i)表示该进,使用mysqli,执行速度更快,更方便,更高效,也可以使数据库访问更安全(因为用类模式)

使用mysqli 简单流程

设置PHP.ini 配置文件
extension=php_mysqli.dll

//创建连接

$conn = new mysqli($servername, $username, $password, $dbname);

//检测连接

if ($conn->connect_error)  
{ 
  die("Connection failed: " . $conn->connect_error); 
}

//获取数据库返回值

if($stmt=$con->prepare("SELECT username,password FROM member WHERE username=? AND password=?")) 
{ 
  $stmt->bind_param("ss",$username,$password); 
  $stmt->execute(); 
  $stmt->bind_result($U,$P); 
  $HasData=false; 
  while($stmt->fetch()) 
  { 
    $HasData=true; 
    echo "username->".$U." password->".$P."<br>"; 
  } 
}

//关闭连接

$conn->close();

//常用语法
INSERT INTO [表名] ([字段1],[字段2]) VALUES ([值1],[值2]);
SELECT * FROM [表名] WHERE [表达式] ORDER BY [字段1],[ASC/DESC 升/降] [字段2],[ASC/DESC 升/降];
DELETE FROM [表名] WHERE [表达式];
UPDATE [表名] SET [字段1]=[值1],[字段2]=[值2] WHERE [表达式];
获取总行数:SELECT COUNT(*) FROM [表]

//中文乱码

//针对页面 
header("Content-Type:text/html;charset=utf-8"); 
//针对数据库 
mysqli->query("SET CHARACTER SET 'utf8'");//读库  
mysqli->query("SET NAMES 'utf8'");//写库

以下是一些实例

连接mysqli

建立MYSQL配置文件 config.ini.php

config.ini.php 内容如下:

<?php 
 $dbhost ="locallhost";
 $dbuser = "hehehe";
 $dbpwd = "123456";
 $dbname = "Student";
 $charName = "gbk2312"; 设置查询字符集gbk,gbk2312,utf-8
?>

(用mysqli链接MYSQL数据库)

requery_once("config.ini.php");
$mysqliObj = new mysqli($dbhost,$dbuser,$dbpwd,$dbname);
if(mysqli_connect_errno()){
 echo "连接失败".mysqli_connect_error();
 exit();
}
$mysqliObj->query("set name $charName");

(其他操作)

查询

(单条查询)
$sql = "drop table if exists user;";
$mysqliObj->query($sql);
 
(多条查询)
$musqliObj->multip_query($sql)
 

返回执行$sql受影响的行数()
 
if($mysqliObj->query($sql))
echo $mysqliObj->affected_rows;
 
insert 插入时,返回插入的id (很有用) 

 $num = $mysqliObj->insert_id;

三种处理查询结果

$sql = "select * from user";
 $result = $mysqli->query($sql);
 
(1)fetch_row()  返回索引数组
fetch_row()
while(list($id,$name,$pwd)=$result->fetch_row()){
echo "id: ".$id." name:".$name." pwd:".$pwd."<br>";
 
}
(2)fetch_assoc() 返回关联数组
fetch_assoc()
while ($row = $result->fetch_assoc()){
 echo "id:".$row["userId"]." name:".$row["userName"]." pwd:".$row["password"]."<br>";
}
 
(3)fetch_object()返回对象
while($row = $result->fetch_object()){
echo "id:".$row->userId." name:".$row->uerName." pwd:".$row->password."<br>";
 
}

关联数组,就是嵌套的数组 如:

<?php
$data = array(
     array('name' => 'John Smith', 'home' => '555-555-5555',
        'cell' => '666-555-5555', 'email' => 'john@myexample.com'),
     array('name' => 'Jack Jones', 'home' => '777-555-5555',
        'cell' => '888-555-5555', 'email' => 'jack@myexample.com'),
     array('name' => 'Jane Munson', 'home' => '000-555-5555',
        'cell' => '123456', 'email' => 'jane@myexample.com')
    );

?>

使用 mysqli_stmt 类

mysql4.1版本开始提供一种预处理(prepared statement)的机制,它可以见整个命令向MYSQL服务器发送一次,以后只有参数变化,MYSQL只需要对命令做一次的分析就够了,大大减少需要传输的数据量,还提高了命令的处理效率(注,在不需要连接时应该立刻关闭close())

步骤:

1,预备SQL命令
  $sql = "insert into user(name,pwd) values(?,?)";
  $stms = $mysqli->prepare($sql);
2.绑定数据
  $stms->bind_param('ss',$name,$pwd);   (注意'ss':其要与后面的变量对应($name,$pwd)
                                           i  所有inerger类型
                                           d  double 或float 类型
                                           s  所有其他类型包括字符串
                                           b  二进制(blob,二进制字节串)
                                        
                                         )
  $name = "huang";
  $pwd = "123456";
3.执行
  $stms->execute();
[4.在绑定执行另一组数据 
  $name = "he";
  $pwd = "666666";
  $stms->execute();
 ]
5.关闭
  $stmt->close();
  $mysqli->close();
 
(其他有用参数)
 $num = $stmt->affected_rows;      受影响的行数
 $id  = $stmt->insert_id;          当是插入命令时,返回插入的行id(自动)
 
事务处理

在默认情况下,MYSQL是以自动提交(autocommit)模式运行,这就意味着所执行的每一个语句都将立即写入数据库中,但如果使用事务安全的表格类型,是不希望自动提交的行为的
事务处理
当执行多条MYSQL命令时,当然希望当其中一条命令出错时,所有的命令都不执行,返回执行命令之前的状态
这就用到事务了
  
 简单运用事务流程
1.写好SQL命令
  $sql1 = "insert user(name) values('huang','123456')";
  $sql2 = "update account set number = number+1";
2.关闭MYSQL事务处理的自动提交模式
  $mysqli->cutocommit(0);
3.试执行命令
  $success = true;
  $res1 = $mysqli->query($sql1);
  if(!$res1 or $mysqli->affected_rows !=1){
     $success = false;
  }
  $res2 = $mysqli->query($sql2);
  if(!$res2 or $mysqli->affected_rows !=1){
     $success = false;
  }
4.查看执行情况,都成功执行,有失败回滚初态
  if($success ){
     $mysqli->commit();
     echo "执行成功";
  }else{
     $mysqli->rollback();
     echo "执行失败";
  }
5.恢复MYSQL事务处理的自动提交模式
  $mysqli->cutocommit(1);
  $mysqli->close();
  
 
mysql 目前只有InnDB和BDB两种数据包类型才支持事务
InnoDB最快
(创建InnDB类型表)

create table user(
id int(10) not null auto_increment,
name varchar(50) not null,
pwd varchar(50) not null,
primary key(id)
)type=InnoDB
PHP 相关文章推荐
不用iconv库的gb2312与utf-8的互换函数
Oct 09 PHP
玩转虚拟域名◎+ .
Oct 09 PHP
php若干单维数组遍历方法的比较
Sep 20 PHP
php array_filter除去数组中的空字符元素
Jun 21 PHP
解析phpstorm + xdebug 远程断点调试
Jun 20 PHP
Php中使用Select 查询语句的实例
Feb 19 PHP
PHP 实现类似js中alert() 提示框
Mar 18 PHP
PHP多进程编程总结(推荐)
Jul 18 PHP
php实现带读写分离功能的MySQL类完整实例
Jul 28 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
Mar 15 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
Feb 08 PHP
Yii框架ACF(accessController)简单权限控制操作示例
Apr 26 PHP
PHP版微信小店接口开发实例
Nov 12 #PHP
PHP错误和异常处理功能模块示例
Nov 12 #PHP
php版微信小店调用api示例代码
Nov 12 #PHP
php实用代码片段整理
Nov 12 #PHP
php中strlen和mb_strlen用法实例分析
Nov 12 #PHP
Yii2单元测试用法示例
Nov 12 #PHP
php获取flash尺寸详细数据的方法
Nov 12 #PHP
You might like
在同一窗体中使用PHP来处理多个提交任务
2008/05/08 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
解密效果
2006/06/23 Javascript
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
Jquery的Ajax技术使用方法
2019/01/21 jQuery
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
详解python:time模块用法
2019/03/25 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
浅析Python的命名空间与作用域
2020/11/25 Python
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
节约用水标语
2014/06/11 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android