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 相关文章推荐
PHP调用三种数据库的方法(3)
Oct 09 PHP
php递归列出所有文件和目录的代码
Sep 10 PHP
PHP 变量类型的强制转换
Oct 23 PHP
使用PHP静态变量当缓存的方法
Nov 13 PHP
php一维二维数组键排序方法实例总结
Nov 13 PHP
php获取CSS文件中图片地址并下载到本地的方法
Dec 02 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
php使用正则验证中文
Apr 06 PHP
Yii2如何批量添加数据
May 17 PHP
PHP钩子与简单分发方式实例分析
Sep 04 PHP
php实现登录页面的简单实例
Sep 29 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
May 02 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
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
php动态生成函数示例
2014/03/21 PHP
33道php常见面试题及答案
2015/07/06 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
Flask数据库迁移简单介绍
2017/10/24 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
python NumPy ndarray二维数组 按照行列求平均实例
2019/11/26 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
RIP版本1跟版本2的区别
2013/12/30 面试题
应届生新闻编辑求职信
2013/11/19 职场文书
单身联谊活动方案
2014/01/29 职场文书
幼儿园保教管理制度
2014/02/03 职场文书
《伯牙绝弦》教学反思
2014/03/02 职场文书
保健品市场营销方案
2014/03/31 职场文书
八一建军节主持词
2015/07/01 职场文书
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis