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 相关文章推荐
3
Oct 09 PHP
PHP 变量定义和变量替换的方法
Jul 30 PHP
PHP 强制下载文件代码
Oct 24 PHP
php 注释规范
Mar 29 PHP
php中邮箱地址正则表达式实现与详解
Apr 24 PHP
php的sprintf函数的用法 控制浮点数格式
Feb 14 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
Jul 28 PHP
PHP数组排序之sort、asort与ksort用法实例
Sep 08 PHP
PHP写日志的实现方法
Nov 05 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
thinkphp5修改view到根目录实例方法
Jul 02 PHP
PHP执行linux命令6个函数代码实例
Nov 24 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 curl的深入解析
2013/06/02 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
python数据结构之二叉树的建立实例
2014/04/29 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
python tkinter canvas使用实例
2019/11/04 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
县级文明单位申报材料
2014/05/23 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
幼儿园见习总结
2015/06/23 职场文书
特种设备安全管理制度
2015/08/06 职场文书
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android
Python作用域和名称空间的详细介绍
2022/04/13 Python