Mysqli操作数据库
1.数据库配置
第一种方式
直接在写在创建Mysql对象中。这不建议用。建议写在一个配置文件中
//建立到Mysql的链接
$mysqli= new mysqli('127.0.0.1','root','123456','zl.com');
第二种方式:新建config.php文件
return[
'type'=>$type??'mysqli',
'host'=>$host??'localhost',
'port'=>$port??'3306',
'dbname'=>$dbname??'phpcnyizhi',
'dbuser'=>$dbuser??'phpcnyizhi',
'dbpwd'=>$dbpwd??'phpcnyizhi',
'charset'=>$charset??'utf8'
];
2.连接数据库,创建一个connext.php文件。
使用上面第二种方式连接
//引入配置文件,得到一个关联数组
$config=require (__DIR__.'/../config.php');
//数组拆分为变量
extract($config);
//创建Mysqli对象
$mysqli= new mysqli($host,$dbuser,$dbpwd,$dbname);
//无法链接时,输出错误信息
//connect_errno 返回最后一次连接数据库的错误代码
//connect_error回最后一次连接数据库的错误描述,为字符串
if($mysqli->connect_errno){
die("CONNECT_ERROR:".$mysqli->connect_error);
}
//设置默认的客户端字符集
$mysqli->set_charset('utf-8');
3.插入新数据
//引入通用文件
require ('connect.php');
$sql="INSERT `yizhi_user` SET `username`=?,`password`=?,`cid`=?";
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('ssi',$username,$password,$cid);
/ 插入方式一:直接给绑定的变量赋值
// $username='王五1';
// $password=md5('123456');
// $cid=1;
// 插入方式二:数组的形式
$data=[
'username'=>'赵六',
'password'=>md5('123456'),
'cid'=>1
];
extract($data);
$res=$stmt->execute();
if($res){
printf("新增加了%s条纪录,插入的纪录ID是%d,<br>",$stmt->affected_rows,$stmt->insert_id);
}
// 关闭
$mysqli->close()
4.删除数据,只是SQL语句发生了变化
require ('connect.php');
$sql="DELETE FROM `yizhi_user` WHERE `id`=?";
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('i',$id);
$id=14;
if($stmt->execute()){
printf("删除了%s条纪录,<br>",$stmt->affected_rows);
}else
{
exit(printf("操作失败,失败编号d%,失败错误信息s%",$stmt->errno,$stmt->error));
};
$mysqli->close();
5.更新数据
require ('connect.php');
$sql="UPDATE `yizhi_user` SET `username`=?,`password`=?,`cid`=? WHERE `id`>?";
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('ssii',$username,$password,$cid,$id);
//用关联数组形式
$data=[
'username'=>'赵六u',
'password'=>md5('123456'),
'cid'=>1,
'id'=>10
];
extract($data);
if($stmt->execute()){
printf("更新了%s条纪录,<br>",$stmt->affected_rows);
}else
{
exit(printf("操作失败,失败编号d%,失败错误信息s%",$stmt->errno,$stmt->error));
};
$mysqli->close();
6.1查询数据方式一
//1.连接
require ('connect.php');
//2.查询
$sql="SELECT * FROM `yizhi_user` WHERE `id`>?";
$stmt=$mysqli->prepare($sql);
$id=10;
$stmt->bind_param('i',$id);
$stmt->execute() or die($stmt->error);
//获取结果集
$res=$stmt->get_result();
if($res->num_rows===0){
exit("结果为空");
}
//以关联数组形式返回一条纪录
// print_r ($res->fetch_assoc());
//循环输出结果集 第一种循环方式
while($user=$res->fetch_assoc()){
vprintf("id:%d|名字:%s|密码:%s|cid:%d<br>",$user);
}
echo "共有{$res->num_rows}条纪录";
//释放结果集
$res->free();
//关闭
$mysqli->close();
6.2查询数据方式二
//fetch_all以二维关联数组方式返回。参数值 关联数组MYSQLI_ASSOC,数值索引数组MYSQLI_NUM,或者两者皆有MYSQLI_BOTH的方式
$users=$res->fetch_all(MYSQLI_ASSOC);//默认是MYSQLI_NUM
foreach($users as $user){
vprintf("id:%d|名字:%s|密码:%s|cid:%d<br>",$user);
}
6.3查询数据方式三
//1.连接
require ('connect.php');
//2.查询
$sql="SELECT `username`,`password`,'cid' FROM `yizhi_user` WHERE `id`>?";
$stmt=$mysqli->prepare($sql);
$id=10;
$stmt->bind_param('i',$id);
$stmt->execute() or die($stmt->error);
//3.字段与变量绑定
$stmt->bind_result($username,$password,$cid);
//因为当前操作不涉及结果集对象,如果要获取结果集中的数量,用以下两行代码
$stmt->store_result();
if($stmt->num_rows===0)exit("没有内容");
while($stmt->fetch()){
printf("名字:%s|密码:%s|cid:%d<br>",$username,$password,$cid);
}
//4.关闭
$mysqli->close();
PDO操作数据库
连接数据库文件connect.php
//导出数据库配置,就是一个关联数组
$config=require (__DIR__.'/../config.php');
extract($config); //数组拆分为变量
//1创建PDO对象
//$dsn数据源名称
//$dsn="mysql:host=localhost;dbname=phpcnyizhi;charset=utf8;port=3306"
try{
$dsn=sprintf('%s:host=%s;dbname=%s;charset=%s;port=%s',$type,$host,$dbname,$charset,$port);
$pdo= new pdo($dsn,$dbuser,$dbpwd);
//设置纪录集的默认获取方式,只关心关联数组部分
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
}
//捕捉特定于数据库信息的PDOException异常
catch(PDOException $e){
echo $e->getMessage();
}
//捕捉拥有Throwable接口的错误或者其它异常
catch(Throwable $e){
echo $e->getMessage();
}
插入数据第一种方式
require ('connect.php');
$sql="INSERT `yizhi_user` SET `username`=?,`password`=?,`cid`=?";
$stmt=$pdo->prepare($sql);
$stmt->bindParam(1,$username,PDO::PARAM_STR,30);
$stmt->bindParam(2,$password,PDO::PARAM_STR,100);
$stmt->bindParam(3,$cid,PDO::PARAM_STR,50);
$username="张飞";
$password=md5('123456');
$cid=1;
$stmt->execute();
if($stmt->rowCount() > 0){
echo "新增成功".$stmt->rowCount()."条纪录,主键ID".$pdo->lastInsertId();
}
else{
exit("失败");
}
//关闭
//$pdo=null;
unset($pdo);
插入数据第二种方式
require ('connect.php');
$sql="INSERT `yizhi_user` SET `username`=?,`password`=?,`cid`=?";
$stmt=$pdo->prepare($sql);
//值绑定,直接给execute传参来实现
$stmt->execute(['关羽',md5('123456'),1]);
if($stmt->rowCount() > 0){
echo "新增成功".$stmt->rowCount()."条纪录,主键ID".$pdo->lastInsertId();
}
else{
exit("失败");
}
//关闭
//$pdo=null;
unset($pdo);
更新数据
require ('connect.php');
$sql="UPDATE `yizhi_user` SET `cid`=? WHERE id>?";
$stmt=$pdo->prepare($sql);
$stmt->execute([5,15]);
if($stmt->rowCount() > 0){
echo "更新".$stmt->rowCount()."条纪录";
}
else{
exit("失败");
}
//关闭
//$pdo=null;
unset($pdo);
删除数据
require ('connect.php');
$sql="DELETE FROM `yizhi_user` WHERE id>?";
$stmt=$pdo->prepare($sql);
$stmt->execute([25]);
if($stmt->rowCount() > 0){
echo "删除".$stmt->rowCount()."条纪录";
}
else{
exit("失败");
}
//关闭
//$pdo=null;
unset($pdo);
查询数据方式一 while+fetch
//1.连接
require ('connect.php');
//2.查询
$sql="SELECT * FROM `yizhi_user` WHERE `id`>?";
$stmt=$pdo->prepare($sql);
$stmt->execute([15]);
// print_r ($stmt->fetch());
// print_r ($stmt->fetch());
// print_r ($stmt->fetch());
//循环输出结果集 第一种循环方式
while($user=$stmt->fetch()){
vprintf("id:%d|名字:%s|密码:%s|cid:%d<br>",$user);
}
//关闭
//$pdo=null;
unset($pdo);
查询数据方式二fetchall+foreach
require ('connect.php');
//2.查询
$sql="SELECT * FROM `yizhi_user` WHERE `id`>?";
$stmt=$pdo->prepare($sql);
$stmt->execute([10]);
$users=$stmt->fetchall();//默认是MYSQLI_NUM
foreach($users as $user){
vprintf("id:%d|名字:%s|密码:%s|cid:%d<br>",$user);
}
//关闭
//$pdo=null;
unset($pdo);
查询数据方式三
require ('connect.php');
//2.查询
$sql="SELECT * FROM `yizhi_user` WHERE `id`>?";
$stmt=$pdo->prepare($sql);
$stmt->execute([5]) or die($stmt->error);
//3.字段与变量绑定
$stmt->bindColumn('username',$username);
$stmt->bindColumn('password',$password);
//PDO::FETCH_BOUND 以布尔值的形式返回结果,同时将获取的列值赋给bindParam()方法中指定的变量。
while($stmt->fetch(PDO::FETCH_BOUND)){
printf("名字:%s|密码:%s<br>",$username,$password);
}
//获取影响的纪录数
$sql="SELECT COUNT(`id`) AS `count` FROM `yizhi_user` WHERE id>?";
$stmt=$pdo->prepare($sql);
$stmt->execute([5]) or die($stmt->error);
$stmt->bindColumn('count',$count);
$stmt->fetch(PDO::FETCH_BOUND);
echo "查询到{$count}条数据";
//关闭
//$pdo=null;
unset($pdo);
操作数据库总结
1.基本步骤
序号 |
步骤 |
描述 |
1 |
连接数据库 |
使用Mysqli或PDO连接 |
2 |
操作数据库 |
sql语句新增、更新、删除、查询 |
3 |
获取以及释放结果集 |
仅针对查询操作有效,清空查询结果的过程。其它无效 |
4 |
关闭数据库链接 |
销毁数据库连接对象 |
- 写操作(INSERT/UPDATE/DELETE): 返回受影响的记录数量(整数)
- 读操作(SELECT/DESC…): 返回查询结果集(二维关联数组)
2.连接参数
序号 |
参数 |
描述 |
1 |
type |
数据库类型 |
2 |
host |
数据库主机名 |
3 |
dbname |
数据库名称 |
4 |
charset |
字符集 |
5 |
port |
端口号 |
6 |
username |
用户名 |
7 |
password |
密码 |
3.1 mysqli
3.1.1 mysqli对象
序号 |
属性/方法 |
描述 |
1 |
connect_errno |
连接错误编码 |
2 |
connect_error |
连接错误信息 |
3 |
set_charset |
设置字符集 |
4 |
prepare |
创建mysqli_stmt 对象 |
3.1.1 mysqli_stmt对象
序号 |
属性/方法 |
描述 |
1 |
bind_param() |
占位符与变量绑定 |
2 |
bind_result() |
字段与变量绑定 |
3 |
execute() |
执行 SQL 语句 |
4 |
get_result() |
创建mysqli_result 对象 |
5 |
fetch() |
遍历变量中的字段 |
6 |
close() |
关闭预处理查询 |
7 |
affected_rows |
受影响记录数量 |
8 |
insert_id |
新增记录主键 id |
9 |
errno |
错误编号 |
10 |
error |
错误信息 |
3.1.2 mysqli_result对象
序号 |
属性/方法 |
描述 |
1 |
fetch_assoc() |
以关联数组返回一条记录 |
2 |
fetch_all() |
获取全部记录 |
3 |
num_rows |
结果集记录数量 |
4 |
free() |
释放结果集 |
3.2PDO
3.2.1PDO对象
序号 |
属性/方法 |
描述 |
1 |
setAttribute() |
设置属性 |
2 |
lastInsertId() |
最后插入记录的主键 id |
3 |
prepare() |
创建PDOStatement 对象 |
3.2.2PDOStatement对象
序号 |
属性/方法 |
描述 |
1 |
execute() |
执行预处理语句,也可以传参,用于值绑定 |
2 |
fetchAll() |
获取结果集,通常会传参数 PDO::FETCH_ASSOC 得到一个二维关联数组 |
3 |
fetch() |
从结果集中获取下一行,通常会传参 PDO::FETCH_ASSOC 得到关联数组 |
4 |
bindColumn() |
绑定每个字段到对应的变量 |
5 |
rowCount() |
受影响的行数 |
6 |
bindParam() |
绑定占位符与变量名 |
7 |
bindValue() |
绑定占位符与值 |
总结
跟着学习,难度不大,关键要自己练习,才能记忆下来。做好笔记,忘记时看看,时常温习!