Duang~MySQLi 扩展库来袭
PHP-MySQL 函数库是 PHP 操作 MySQL 资料库最原始的扩展库,PHP-MySQLi 的 i 代表 Improvement ,相当于前者的增强版,也包含了相对进阶的功能,另外本身也增加了安全性,比如可以大幅度减少 SQL 注入等问题的发生。
开启扩展
mysqli 扩展默认并不会开启,为此我们需要找到 php.ini 文件,并且需要确认删除了 [PHP_MYSQLI] 部分中的 extension=php_mysqli.dll 行首的注释符号 ;(分号)。
检验是否开启成功的几种方式
#1 通过 PHPInfo()函数
phpinfo();
#2 通过extension_loaded() 函数检测
var_dump(extension_loaded('mysqli'));
#3 通过 (function_exists()检测函数是否存在
var_dump(function_exists('mysqli_connect'));
#4 通过get_loaded_extensions() 函数得到当前已经开启的扩展
print_r(get_loaded_extensions());
连接数据库
连接并选择 mysql 数据库的几种方式:
#1 建立到MySQL数据的连接并选择数据库
$mysqli=new mysqli('localhost','root','root');
$mysqli->select_db('test');
#2 实例化mysqli对象之后实现连接
$mysqli=new mysqli();
$mysqli->connect('127.0.0.1','root','root');
#3 建立连接的同时打开指定数据库(常用)
$mysqli=@new mysqli('localhost','root','root','test');
#4 检测是否连接成功
if ($mysqli->connect_errno) {die("数据库连接失败,错误信息:".$mysqli->connect_error);
}
$mysqli->connect_errno:得到连接产生的错误编号 ,$mysqli->connect_error:得到连接产生的错误信息
设置编码格式及获取基本信息
#1 通过函数设置
$mysqli->set_charset('utf8');
#2 通过查询设置
$mysqli->query("set names utf8")
# 获取当前字符集
echo $mysqli->character_set_name()."<br>";
# 获取客户端信息
echo $mysqli->get_client_info()."<br>";
# 获取mysql主机信息
echo $mysqli->host_info."<br>";
# 获取服务器信息
echo $mysqli->server_info."<br>";
# 获取服务器版本
echo $mysqli->server_version."<br>";
CURD之新增
#1 编写 SQL 语句:
$sql="INSERT user(username,password) VALUES ('queen1','queen1'),('queen2','queen2')";
#2 使用query方法查询
$res = $mysqli->query($sql);
#3 查询成功可利用 insert_id 属性得到上一插入操作产生的AUTO_INCREMENT的值
echo '恭喜您注册成功,您是网站第'.$mysqli->insert_id.'位用户<br/>';
#4 查询失败可利用 errno(错误编号)及error(错误信息)进行提示:
echo 'ERROR '.$mysqli->errno.':'.$mysqli->error;
CURD之修改
#1 同样编写 SQL 语句:
$sql="UPDATE user SET age = age + 10";
#2 使用query方法查询
$res=$mysqli->query($sql);
#3 可利用 affected_rows 属性查询受影响数目
echo $mysqli->affected_rows.'条记录被更新';
#4 查询失败可利用 errno(错误编号)及error(错误信息)进行提示:
echo 'ERROR '.$mysqli->errno.':'.$mysqli->error;
CURD之删除
#1 编写 SQL 语句
$sql="DELETE FROM user WHERE id<=6";
#2 使用query方法查询
$res=$mysqli->query($sql);
注意:上面增删改查询返回结果均为 bool 类型,且均可使用 affected_rows 属性查看受影响条数,其返回值有三种情况: 受影响的记录条数 、SQL语句有问题则返回 -1,没有受影响记录的条数则返回 0
CURD之查询
#1 编写 SQL 语句
$sql="SELECT id,username,age FROM user";
#2 使用query方法查询
$mysqli_result = $mysqli->query($sql);
查询成功返回 mysqli_result 类,查询失败返回 FALSE,我们可以根据 mysqli_result 类提供几种的方法获取数据;
#3.1 使用 fetch_all() 方法获取结果集中的全部记录,默认放回的是索引格式的二维数组;
$rows = $mysqli_result->fetch_all(MYSQLI_BOTH);
通过参数改变其返回值的类型:MYSQLI_NUM(索引)、MYSQLI_ASSOC(关联)、MYSQLI_BOTH(两者)
#3.2 使用 fetch_array() 方法返回结果集中第一条数据,并且没执行一次该方法,数组指针下移一位,如果后面没有数据则返回NULL,所以利用此特性使用循环同样能实现获取全部数据
while($row = $mysqli_result->fetch_array()){$rows[]=$row;
}
# 使用 fetch_assoc() 方法或者 fetch_row() 方法可以获得与 fetch_array()方法同样的效果,也就说是
fetch_array(MYSQLI_ASSOC) === fetch_assoc();
fetch_array(MYSQLI_NUM) === fetch_row();
#4 查询结束之后,需要释放结果集
$mysqli_result->free();
#5 关闭数据库
$mysqli->close();
多语句查询 - 针对 增、删、改
PHP 实现对 MySQL 多条语句查询—–同时执行 INSERT INTO 、DELETE 、UPDATE 语句:
#1 拼接语句
$sql = "INSERT user(username,password,age) VALUES('atong','atong',18);";
$sql .= "UPDATE user SET age=18 WHERE id=1;";
$sql .= "DELETE FROM user WHERE id=5;";
#2 使用 multi_query() 代替 query() 进行查询
$res = $mysqli->multi_query($sql);
针对 增、删、改的多条SQL语句查询来说:
- multi_query()逐条执行SQL语句,当其中有一条语句执行失败,后面的语句不会继续执行;
- 如果第一条语句执行成功,无论后面有几条语句执行失败,返回值都为true;
- 当第一条语句执行失败,后面的语句不会执行(与1说明情况相同),返回值为false;
- 注意拼写SQL语句时必须带上;符
多语句查询 - SELECT
PHP 实现对 MySQL 多条语句查询—–同时执行多条 SELECT 语句:
#1 拼接多条 SQL 语句:
$sql = "SELECT * FROM user WHERE id = 1;";
$sql .= "SELECT CURRENT_USER();";
$sql .= "SELECT NOW();";
#2 查询并返回结果
$bool = $mysqli->multi_query($sql);
#3 使用 use_result() 或 store_result() 获取第一条查询产生的结果集
$mysqli_result=$mysqli->store_result()
#4 将结果集数组存储为二维数组格式
$rows[]=$mysqli_result->fetch_all(MYSQLI_ASSOC);
#5 检测是否有更多的结果集
more_results()
#6 将结果集指针向下移动一位
next_result()
### 重复…3、4、5、6、即使用可使用循环实现,将以上归纳:
if($mysqli->multi_query($sql)){do{if($mysqli_result=$mysqli->store_result()){$rows[]=$mysqli_result->fetch_all(MYSQLI_ASSOC);}}while($mysqli->more_results() && $mysqli->next_result());
}else{echo $mysqli->error;
}
针对 增、删、改的多条SQL语句查询来说:
- 如果是查询操作,可以对执行多个查询语句,并将所有结果集存储在mysqli对象中,返回true或者false
- 使用 use_result() 或 story_result() 获得 multi_query() 查询后的一个结果集;
- more_result() 检测是否还有更多的结果集,有返回真;
- next_result() 将结果集指针移动指向下一条结果集,移动成功返回真;
预处理
以查询操作为例:
#1 编写SQL语句(注意使用 ‘?’ 作为占位符)
$sql="SELECT id,username,age FROM user WHERE age >= ?";
#2 准备(除了 ? 其它已经不会改变,可防止SQL注入)
$mysqli_stmt=$mysqli->prepare($sql);
#3 绑定参数( s,i,d,s 为字符串,i为整型,d为小数型)
$id = 20;
$mysqli_stmt->bind_param('i',$id);
#4 执行预处理语句(返回值是布尔值)
$bool = $mysqli_stmt->execute()
#5 绑定结果集中的值到变量
$mysqli_stmt->bind_result($id,$username,$age);
#6 遍历结果集
while($mysqli_stmt->fetch()){echo '编号:'.$id,'<br/>';echo '用户名:'.$username,'<br/>';echo '年龄:'.$age.'<br/>';echo '<hr/>';
}
- 预处理语句大大减少了分析时间,值在$mysqli_stmt=$mysqli->prepare($sql);时mysql会分析语句.
- 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
- 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。
事务
事务的实现过程是关闭自动提交功能,然后编写多条查询语句,然后提交查询,如果某条语句查询失败,那么将回滚全部的语句,下面通过一个小栗子学习PHP中的事务:
# 创建一数据表
CREATE TABLE `test` (`id` smallint NOT NULL AUTO_INCREMENT ,`user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,`money` int NOT NULL ,PRIMARY KEY (`id`)
);
# 插入测试数据:
INSERT INTO test (`user_name`,`money`) VALUES('atong',100),('king',50);
#1 关闭自动提交功能
$mysqli->autocommit(FALSE); // 开始事务
#2 准备第一条查询语句
$sql0 = "UPDATE test SET money = money-10 WHERE user_name='atong'";
$res0 = $mysqli->query($sql);
$res_affect0 = $mysqli->affected_rows; //影响数量
#3 准备第二条查询语句
$sql1 = "UPDATE user_money SET money=money+10 WHERE user_name='king'";
$res1 = $mysqli->query($sql1);
$res1_affect = $mysqli->affected_rows;
#4 判断查询结果,如果成功则执行,否则回滚
if($res0 && $res_affect0 > 0 && $res1 && $res1_affect > 0){//手动提交数据$mysqli->commit();echo '转账成功<br/>';//恢复自动提交功能$mysqli->autocommit(TRUE);
}else{//事务回滚,任何一条数据都不执行。$mysqli->rollback();echo '转账失败<br/>';
}
Duang~MySQLi 扩展库来袭相关推荐
- mysqli扩展是mysql扩展的增强版_PHP学习笔记【22】--PHP数据库编程 mysql扩展库 和mysqli扩展库...
<?php // php数据库编程 //php链接有 mysql 和mysqli // $conn = mysql_connect("localh ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第39讲:PHP数据库编程MySQLi扩展库
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第39讲:PHP数据库编程MySQLi扩展库 mysqli扩展允许我们访问MySQL 数据库,并对MySql数据库进行curd操作.mysqli扩展可以进行数 ...
- PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)
1.和mysql扩展库的区别: (1 安全性.稳定性更高 (2 提供了面向对象和面向过程两种风格 2.php.ini 中的 extension=php_mysqli.dll 解除封印 3.面 ...
- php面向对象封装mysql_PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)...
1.和mysql扩展库的区别: (1 安全性.稳定性更高 (2 提供了面向对象和面向过程两种风格 2.php.ini 中的 extension=php_mysqli.dll 解除封印 3.面 ...
- linux php添加mysql扩展模块_linux下为php添加扩展库的方法
本节内容: linux下添加php扩展库 这里以php curl 扩展库编译为例. 本次编译只是单独编译php的扩展库,然后将编译好的php扩展库加到现在运行的php中,不对现在运行的php重新编译, ...
- php 扩展库curl下载,PHP添加CURL扩展库的二种方法
说明: 本次编译只是单独编译php的扩展库,然后将编译好的php扩展库加到现在运行的php中,不对现在运行的php重新编译,对现在运行的php没有任何影响. 有两种方法可以实现这一操作,下面分别介绍. ...
- php5.3 gd库,php5.3动态编译gd库 zlib扩展 mcrypt扩展 mysqli扩展
编译gd cd /usr/local/src/php-5.3.5/ext/gd 一定要在这个目录下执行 /usr/local/php/bin/phpize 接着在当前目录下执行: ./configur ...
- php mysql 持久化_PHP: mysqli 扩展和持久化连接 - Manual
mysqli 扩展和持久化连接 从 PHP 5.3 mysqli 扩展开始支持持久化连接. 持久化连接已经在 PDO MYSQL 和 ext/mysql 中提供支持. 持久化连接的目的在于重用客户端到 ...
- php操作mysql数据库的扩展有哪些_PHP mysql 扩展库 操作mysql数据库步骤
1.和mysql扩展库的区别: (1 安全性.稳定性更高 (2 提供了面向对象和面向过程两种风格 2.php.ini 中的 extension=php_mysqli.dll 解除封印 3.面 ...
最新文章
- UI设计培训分享:ui设计师如何培养设计思维?
- [原创] Debian9上配置Samba
- MySQL数据库:存储引擎
- class matplotlib.figure.Figure
- SVN快速入门3——整合eclipse(1)
- pom.xml文件中nonFilteredFileExtension标签
- orcale物化视图刷新
- HadoopLearning
- Python与数据挖掘学习笔记(1)——Pandas模块
- mysql限制数据类型的长度_MySQL数据类型的长度
- 机器学习python_深入浅出Python机器学习[PDF][176.39MB]
- lenovo微型计算机如何拆t410,联想thinkpad T410S全面拆解
- wps中论文标题编号的设置
- [CityHunter]游戏流程设计及技术要点
- 应用案例 | 2011款保时捷卡宴3.0T车发动机怠速间歇性抖动故障诊断
- 无线测温采集设备及无线测温监控系统的选型指导-安科瑞王婧
- 菜鸟保税仓成全球商家进中国首选 秒级通关领先全球
- MYSQL没有id字段的坑
- android摇一摇跳转界面,android摇一摇随机变图片
- html5多媒体事件写法,多媒体元素重要事件 -HTML5