概述
基本介绍
mysqli ,mysql improve mysql扩展库的增强版
mysql 扩展库 和 mysqli 扩展库的比较
- mysqli 的稳定性和安全性,效率有所提高
- mysqi 支持面向对象编程 ,同时 mysqli 扩展库考虑到php老程序员,提供面向过程和面向对象两种编程风格
- mysqli 的面向过程风格基本类似于mysql,个别不同下面会讲到
mysqli 有两套编程风格
快速入门案例
首先要在php.ini中启动mysql扩展库,通过phpinfo()函数可以查看php支持哪些扩展库
创建user表
mysql> create table user(
-> id int primary key auto_increment,
-> name varchar(32) not null,
-> password varchar(64) not null,
-> email varchar(128) not null,
-> age tinyint unsigned not null
-> );
Query OK, 0 rows affected (0.10 sec)
insert into user(name,password,email,age) values('zs',md5(12345),'zs@qq.com',30);
insert into user(name,password,email,age) values('ls',md5(12345),'ls@qq.com',20);
insert into user(name,password,email,age) values('王五',md5(12345),'ww@qq.com',10);
Query OK, 3 row affected (0.04 sec)
mysql> select * from user;
+----+------+----------------------------------+-----------+-----+
| id | name | password | email | age |
+----+------+----------------------------------+-----------+-----+
| 1 | zs | 827ccb0eea8a706c4c34a16891f84e7b | zs@qq.com | 30 |
| 2 | ls | 827ccb0eea8a706c4c34a16891f84e7b | ls@qq.com | 20 |
| 3 | 王五 | 827ccb0eea8a706c4c34a16891f84e7b | ww@qq.com | 10 |
+----+------+----------------------------------+-----------+-----+
3 rows in set (0.00 sec)
面向过程风格(dql)
//1.创建对象 连接数据库 选择数据库
$conn = mysqli_connect('localhost','root','','test');
//这里也可以用 !$conn 或 mysqli_connect_error()
if (mysqli_connect_errno()){
//这里要用mysqli_connect_error,不能用mysqli_error
die('连接失败'.mysqli_connect_error());
}else{
echo '连接成功';
}
//2.设置数据库,一般可省略(可修改步骤1设置的数据库)
mysqli_select_db($conn,'test1') or die('无此数据库'.mysqli_error($conn));
//3.设置字符集
mysqli_query($conn,'set names utf8');
//4.查询数据
$sql = 'select * from user';
$res = mysqli_query($conn,$sql);
if (!$res){
die('读取数据失败<br>'.mysqli_error($conn));
}else{
echo '读取数据成功<br>';
}
//5.处理数据
while ($row = mysqli_fetch_row($res)){
foreach ($row as $k=>$v){
echo "$v--";
}
echo '<br>';
}
//6.关闭资源,关闭连接
mysqli_free_result($res);
mysqli_close($conn);
面向过程风格(dml)
//1.创建对象 连接数据库 选择数据库
$conn = mysqli_connect('localhost','root','','test');
//这里也可以用 !$conn 或 mysqli_connect_error()
if (mysqli_connect_errno()){
//这里要用mysqli_connect_error,不能用mysqli_error
die('连接失败'.mysqli_connect_error());
}else{
echo '连接成功';
}
//2.设置数据库,一般可省略(可修改步骤1设置的数据库)
mysqli_select_db($conn,'test1') or die('无此数据库'.mysqli_error($conn));
//3.设置字符集
mysqli_query($conn,'set names utf8');
//4.操作数据(dml)
$sql = "insert into user(id,name,password,email,age) values(5,'小李',md5(12345),'xl@qq.com',25)";
//$sql = 'delete from user where id=10';
$res = mysqli_query($conn,$sql);
if (!$res){
die('操作失败<br>'.mysqli_error($conn));
}
if (mysqli_affected_rows($conn)>0){
echo '操作成功';
}else{
echo '未进行数据操作';
}
//5.关闭连接
mysqli_close($conn);
函数详解
mysqli 函数中,有的需要传连接标识符$conn,有的不需要,没啥规律,且需要传标识符的函数不能像mysql的函数一样省略标识符
mysqli_connect()
mysqli_connect() 函数打开一个到 MySQL 服务器的新的连接
mysqli_connect(host,username,password,dbname,port,socket) 参数均为可选;
成功返回一个 mysql 连接标识 link_identifier,失败返回 false
mysqli_connect_error()
返回一个描述错误的字符串。如果没有错误发生则返回 NULL
mysqli_connect_error()专用于mysqli_connect()的错误处理,即数据库连接发生的问题
没有mysql_connect_error()函数,mysql的错误处理全部用mysql_error()
mysqli_error()
返回一个带有错误描述的字符串。如果没有错误发生则返回 ""
mysqli_error() 函数来报告源于运行查询的错误,注意和mysql_connect_error()使用场景的区分
mysqli_error()必须有参数 $link_identifier,mysql_error()可省略参数
mysqli_query()
如果执行的是dml 语句,则返回bool
如果执行的是 dql 语句,则返回一个资源标识符,如果查询执行不正确则返回 false
创建 / 删除数据库,设置字符集等有专用函数,但是可以用mysql_query()函数代替,返回bool
mysqli_affected_rows()
mysqli_affected_rows() 函数返回前一次 MySQL 操作(SELECT、INSERT、UPDATE、REPLACE、DELETE)所影响的记录行数
mysql_affected_rows() 取得最近一次与 link_identifier 关联的 INSERT,UPDATE 或 DELETE 查询所影响的记录行数,注意区别
处理资源$res的几种函数
mysqli_fetch_row(),从结果集中取得一行,并作为索引数组返回
Array ( [0] => 1 [1] => zs [2] => ** [3] => zs@qq.com [4] => 30 )
mysqli_fetch_assoc(),从结果集中取得一行,并作为关联数组返回
Array ( [id] => 1 [name] => zs [password] => ** [email] => zs@qq.com [age] => 30 )
mysqli_fetch_array() ,从结果集中取得一行,并作为索引数组和关联数组返回
Array ( [0] => 1 [id] => 1 [1] => zs [name] => zs [2] => ** [password] => ** [3] => zs@qq.com [email] => zs@qq.com [4] => 30 [age] => 30 )
mysqli_fetch_object() ,从结果集中取得一行,并作为对象返回
mysqli 过程化风格细节
mysqli 的面向过程风格基本类似于mysql,
连接数据库
mysqli_connect() 和 mysql_connect() 的参数不一样,mysqli_connect() 中可以直接选择数据库和端口
mysqli_connect() 和 mysql_connect() 返回值一样,成功返回一个 mysql 连接标识,失败返回 false
mysqli_connect() 有专用的错误处理函数 mysqli_connect_error(),该函数无参数,不会因为返回false,导致错误处理失效
mysqli_connect_error() 和 mysqli_error() 的区别
在 mysqli 中,错误报告函数被分为了“连接”和“运行查询”两种
也就是说原来统一的 mysql_error() 被分为 mysqli_connect_error() 和 mysqli_error()
mysqli_connect_error() 不需要参数,mysqli_error() 需要参数
如果连接数据库连接发生问题,就可以调用 mysqli_connect_error(),它将返回出错信息
如果其他问题,调用mysqli_error() 函数来报告源于运行查询的错误
面向对象风格(dql)
//1.创建对象 连接数据库 选择数据库
//mysqli_connect() 对应的面向对象风格 mysqli::__construct 并没有 mysqli::connect
$conn = new mysqli('localhost','root','','test');
//不管是否连接成功$conn都是object类型,不能用!$conn
//$conn->connect_error 和 $conn->connect_errno都行,这俩是属性哦(不知道怎么拿到返回值的 不懂)
if ($conn->connect_errno){
die('连接失败'.$conn->connect_error);
}
//2.设置数据库,一般可省略(可修改步骤1设置的数据库)
$conn->select_db('test') or die('无此数据库'.$conn->error);
//3.设置编码
$conn->query('set names utf8');
//4.查询数据
$sql = 'select * from user';
$res = $conn->query($sql);
if (!$res){
die('读取数据失败<br>'.$conn->error);
}else{
echo '读取数据成功<br>';
}
//5.处理数据
while ($row = $res->fetch_row()){
foreach ($row as $k=>$v){
echo "$v--";
}
echo '<br>';
}
//6.关闭资源,关闭连接
$res->free();
$conn->close();
面向对象风格(dml)
//1.创建对象 连接数据库 选择数据库
//mysqli_connect 对应的面向对象风格 mysqli::__construct 并没有 mysqli::connect
$conn = new mysqli('localhost','root','','test');
//不管是否连接成功$conn都是object类型,不能用!$conn
//$conn->connect_error 和 $conn->connect_errno都行,这俩是属性哦(不知道怎么拿到返回值的 不懂)
if ($conn->connect_errno){
die('连接失败'.$conn->connect_error);
}
//2.设置数据库,一般可省略(可修改步骤1设置的数据库)
$conn->select_db('test') or die('无此数据库'.$conn->error);
//3.设置编码
$conn->query('set names utf8');
//4.操作数据
//$sql = "insert into user(id,name,password,email,age) values(5,'小李',md5(12345),'xl@qq.com',25)";
$sql = 'delete from user where id=5';
$res = $conn->query($sql);
if (!$res){
die('操作失败<br>'.$conn->error);
}
if ($conn->affected_rows>0){
echo '操作成功';
}else{
echo '未进行数据操作';
}
//5.关闭连接
$conn->close();
mysqli 面向对象风格细节
mysqli 面向对象风格基本上就是把过程化风格的函数封装成属性和方法,通过对象(连接标识符)来访问,不知道有的属性怎么取到的返回值
连接数据库
面向对象风格是通过构造函数连接数据库的,面向过程风格则是通过mysqli_connect()函数
mysqli_connect() 对应的面向对象风格 mysqli::__construct() 并不是 mysqli::connect(),根本没有 mysqli::connect()
释放资源
//mysqli面向过程风格
void mysqli_free_result ( mysqli_result $result )
//mysqli面向对象风格(三种都可以)
void mysqli_result::free (void)
void mysqli_result::close (void)
void mysqli_result::free_result (void)
mysqli 增删改查工具类
class sqlHelper{
private $host;
private $user;
private $password;
private $dbname;
private $conn;
public function __construct($host,$user,$password,$dbname){
$this->host = $host;
$this->user = $user;
$this->password = $password;
$this->dbname = $dbname;
//1.连接数据库 选择数据库
$this->conn = new mysqli($this->host,$this->user,$this->password,$this->dbname);
if ($this->conn->connect_errno){
die('连接失败'.$this->conn->connect_errno);
}
//2.设置编码
$this->conn->query('set names utf8');
}
//3.获取数据(dql)
public function execute_dql($sql){
$res = $this->conn->query($sql);
if (!$res){
die('操作失败'.mysqli_error($this->conn).'<br>');
}else{
echo '操作成功<br>';
}
while ($row = $res->fetch_row()){
foreach ($row as $k=>$v){
echo "$v--";
}
echo '<br>';
}
//4.释放资源 关闭连接
$res->free();
//$this->conn->close();
}
//3.获取数据(dml)
public function execute_dml($sql){
$res = $this->conn->query($sql);
if (!$res){
die('操作失败'.mysqli_error($this->conn));
}
if ($row = $this->conn->affected_rows>0){
echo '操作成功';
}else{
echo '未进行数据操作';
}
//4.关闭连接
//$this->conn->close();
}
}
$db = new sqlHelper('localhost','root','','test');
$sql = 'select * from user';
$db->execute_dql($sql);
$sql = 'delete from user where id=5';
$db->execute_dml($sql);
最后
以上就是淡定面包为你收集整理的php数据库编程—mysqli的全部内容,希望文章能够帮你解决php数据库编程—mysqli所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复