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 开源AJAX框架14种
Aug 24 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
Aug 18 PHP
PHP的password_hash()使用实例
Mar 17 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
php下载文件源代码(强制任意文件格式下载)
May 09 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
Jan 04 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
统计PHP目录中的文件数方法
Mar 05 PHP
PHP操作路由器实现方法示例
Apr 27 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 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
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
PHP小教程之实现双向链表
2014/06/12 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
Firebug入门指南(Firefox浏览器)
2010/08/21 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
python 文件操作删除某行的实例
2017/09/04 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
出国考察邀请函
2014/01/21 职场文书
人力资源总监工作说明
2014/03/03 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
公司内部升职自荐信
2015/03/27 职场文书
班级班风口号大全
2015/12/25 职场文书
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python