MYSQLI与PDO连接数据库与操作
1.基本操作
序号 | 顺序 | 描述 |
---|---|---|
1 | 连接数据库 | 连接数据库可以通过MYSQLI与PDO两种对象进行连接 |
2 | 操作数据库 | 连接完成后对数据库INSERT、DELECT、UPDATE、SELECT(增删改查) |
3 | 释放结果集 | 对数据库操作完成后释放结果集:MYSQLI使用free() |
4 | 关闭数据库 | 操作完成关闭数据库CLOSE()、PDO使用NULL |
1、 连接数据库
- 建立config.php文件返回字符集、使用connect.php文件连接数据库。
1.config.php文件说明
序号 | 名称 | 描述 |
---|---|---|
1 | type | 连接的数据库类型 |
2 | dbname | 连接数据名称 |
3 | host | 连接数据库地址 |
4 | username | 连接数据库用户名 |
5 | password | 连接数据库密码 |
6 | port | 连接数据库端口号 |
7 | charset | 连接数据库字符集 |
示例
<?php
// 连接数据库参数
return[
'type' => $type ?? 'mysql', //数据库类型
'host' => $host ?? 'localhost',//数据库连接地址
'charset'=>$type ?? 'utf8', //数据库字符集
'dbname' =>$type ?? 'mysqli', //数据库名称
'username' => $type ?? 'root', //连接数据库用户名
'password' => $type ?? '142536',//连接数据库密码
'port' => $type ?? '3306' //数据库端口号
];
2.connect.php文件说明
<?php
$config = require __DIR__ ."/../config.php"; //设定一个变量接收config.php的数据库连接参数
extract($config); // 关联数组转换独立变量
$mysqli = new mysqli($host,$username,$password,$dbname,$port);
//连接数据库需要:
//数据库地址$host 连接地址必须在首位
//数据库用户名和密码:$usrname,$password
//数据库名:$dbname
//数据库端口号:$port(可选)
if($mysqli->connect_errno) echo '连接错误:'.$mysqli->connect_error;
//数据库连接错误,显示错误信息
$mysqli->set_charset("utf-8");
<?php
$config = require __DIR__ .'/../config.php';
extract($config);
//$dsn ='mysql:host=localhost;dbname=mysqli;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,$username,$password);
$pdo->setAttribute(PDO::FETCH_ASSOC,PDO::ATTR_DEFAULT_FETCH_MODE);
//设置pdo属性PDO::FETCH_ASSOC结果集列名的数组,
//PDO::ATTR_DEFAULT_FETCH_MODE设置默认的提取模式
}catCh(PDOException $e)
{
exit("连接错误:".$e->getMessage());
//$e->getMessage()获取错误信息
}
2-3 MYSQLI 面向对象与预处理
常用的接口与属性方法。
2-3-1 MYSQLi 接口
序号 | 属性/方法 | 描述 |
---|---|---|
1 | connect_error | 连接错误信息 |
2 | connect_erron | 连接错误编码 |
3 | set_charset | 设置字符集 |
4 | prepare | 创建’mysqli->stmt’对象 |
2-3-2 MYSQLi->stmt 接口
序号 | 属性/方法 | 描述 |
---|---|---|
1 | bind_param() | 占位符与变量绑定 |
2 | bind_result() | 字段与变量绑定 |
3 | execute() | 执行SQL语句 |
4 | get_result() | 创建’mysqli->rseult’对象 |
5 | fetch() | 遍历变量中的字段 |
6 | close() | 关闭数据库连接 |
7 | affected_row | 受影响记录数量 |
8 | insert_id | 受影响主键ID |
9 | error | 错误信息 |
10 | reeon | 错误编码 |
11 | store->result() | 记录集回传 |
2-3-2 MYSQLi->result 接口
序号 | 属性/方法 | 描述 |
---|---|---|
1 | fetch_all() | 获取全部记录 |
2 | fetch_assoc() | 关联数组获取单条记录 |
3 | num_rows() | 结果集记录的数量 |
4 | free() | 释放结果集 |
2-4 PDO 面向对象与预处理
常用的接口与属性方法。
2-4-1 PDO接口
序号 | 属性/方法 | 描述 |
---|---|---|
1 | setAttribute() | 设置属性 |
2 | lastInsertId() | 最后插入记录的主键 id |
3 | prepare() | 创建PDOStatement对象 |
2-4-2 PDOStatement 接口
序号 | 属性/方法 | 描述 |
---|---|---|
1 | setAttribute() | 设置属性 |
2 | lastInsertId() | 最后插入记录的主键 id |
3 | prepare() | 创建PDOStatement对象 |
2、 INSERT连接数添加
1.mysqli对数据库的添加:
- 调用connect.php文件。
- 编写sql添加语句$sql =’INSERT
表名
SET表内容
=?..; - 使用?防SQL注入。
- 使用prepare(),执行等待SQL操作。
- 创建$mysqli->prepare()对象
- 使用bindparm()占位符绑定变量
- 使用数组然后将数组的值赋给变量,添加到数据库。
- 使用executc(),添加到数据库
示例<?php
require "connect.php";
$sql ='INSERT `user` SET `username`=?,`password`=?,`sex`=?,`age`=?,`email`=?,`mobile`=?;';
$stmt = $mysqli->prepare($sql);
//创建mysql_stmt对象
$stmt->bind_param('sssiss',$username,$password,$sex,$age,$email,$mobile);
//使用bind_param占位符绑定变量
$data = [
'username'=>'嫦娥',
'password'=> sha1('8888'),
'age'=> 98,
'sex'=>'女',
'email'=> 'ce@163.com',
'mobile'=> '15687874598',
];
//设定一个$data数组、将数值拆分为变量
extract($data);
//执行SQL
$stmt->execute() or die($stmt->error);
printf('您成功添加了%s条数据,主键ID是:%d',$stmt->affected_rows,$stmt->insert_id);
$mysqli->close();
//insert 重点:bind_param 设定占位符绑定变量,s代表字符串,i代表整数更多占位符查手册
//execute() 执行SQL
//affected_rows 返回执行成功的记录集
//insert_id 返回执行成功的行号
2.PDO对数据库的添加:
- 调用connect.php文件。
- 编写sql添加语句$sql =’INSERT
表名
SET表标题
=?..; - 使用?防SQL注入。
- 使用prepare(),执行等待SQL操作。
- 创建$mysqli->prepare()对象
- 对需要添加的数据赋值,添加到数据库。
- 使用executc(),添加到数据库
<?php
require'connect.php';
$sql ="INSERT `user` SET `username`=?,`password`=?,`age`=?,`sex`=?,`email`=?,`mobile`=? ";
$stmt = $pdo->prepare($sql);
$username ='赤脚大仙';
$sex ='男';
$password =sha1('66666');
$email ='cjdx@163.com';
$mobile = '13745455656';
$age = 388;
$stmt->execute([$username,$password,$sex,$age,$mobile,$email]);
if($stmt->rowCount()>0) exit('添加成功'.$stmt->rowCount().'条数据,主键ID:'.$pdo->lastInsertId());
unset($pdo);
//重点:execute();执行SQL,将变量写入数据库。
//$stmt->rowCount() 如果SQL执行成功那就有值
3、 UPDATE连接数更新
- 1.mysqli对数据库的更新:
- 调用connect.php文件。
- 编写sql更新语句$sql =’UPDATE
数据表
SET标题
=?… WHRER标题
=; - 使用?防SQL注入。
- 使用prepare(),执行等待SQL操作。
- 创建$mysqli->prepare()对象
- 使用bindparm()占位符绑定变量
- 使用数组然后将数组的值赋给变量,更新到数据库。
- exeract()对数组的值转变量。
- 使用executc(),添加到数据库
示例
require "connect.php";
$sql = 'UPDATE `user` SET `username`=?,`password`=?,`sex`=?,`age`=?,`email`=?,`mobile`=? WHERE `Id`=?;';
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('sssissi',$username,$password,$sex,$age,$email,$mobile,$id);
$data = [
'id'=> 317,
'username'=>'嫦娥',
'password'=> sha1('7777'),
'age'=> 78,
'sex'=>'女',
'email'=> 'nw@163.com',
'mobile'=> '16667874598',
];
extract($data);
$stmt->execute() or die($stmt->error);
printf('更新成功了%s条数据',$stmt->affected_rows);
$mysqli->close();
//update重点:在SQL语句中的条件WHERE必须在bind_param中最后
- 2.PDO对数据库的更新:
- 调用connect.php文件。
- 编写sql更新语句$sql =’UPDATE
数据表
SET标题
=?… WHRER标题
=; - 使用?防SQL注入。
- 使用prepare(),执行等待SQL操作。
- 创建$mysqli->prepare()对象。
- 对更新的数据赋值
- 使用executc(),更新到数据库
示例
<?php
require 'connect.php';
$sql = 'UPDATE `user` SET `username`=?,`password`=?,`sex`=?,`age`=?,`email`=?,`mobile`=? WHERE `Id`=?;';
$stmt = $pdo->prepare($sql);
$username ='赤脚大仙';
$sex ='男';
$password =sha1('66666');
$email ='cjdx@163.com';
$mobile = '13745455656';
$age = 388;
$id = 321;
$stmt->execute([$username,$password,$sex,$age,$email,$mobile,$id]);
if($stmt->rowCount()>0)exit('成功更新了'.$stmt->rowCount().'条数据');else echo('更新失败');
3、 DELETE连接数删除
- 1.mysqli对数据库的删除:
- 调用connect.php文件。
- 编写sql删除语句$sql =’DELETE FROM
数据表
WHERE标题
=?;’; - 使用?防SQL注入。
- 使用prepare(),执行等待SQL操作。
- 创建$mysqli->prepare()对象
- 使用bindparm()占位符绑定变量
- 对删除的条件赋值,或用户提交
- exeract()对数组的值转变量。
- 使用executc(),删除数据库数据
示例
<?php
<?php
require'connect.php';
$sql = 'DELETE FROM `user` WHERE `Id`=?;';
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('i',$id);
$id=318;
$stmt->execute() or die($stmt->error);
printf('删除成功了%s条数据,主键ID是:',$stmt->affected_rows);
$mysqli->close();
- 2.PDO对数据库的删除:
- 调用connect.php文件。
- 编写sql删除语句$sql =’DELETE FROM
数据表
WHERE标题
=?;’; - 使用?防SQL注入。
- 使用prepare(),执行等待SQL操作。
- 创建$mysqli->prepare()对象
- 对删除的条件赋值,或用户提交
- exeract()对数组的值转变量。
- 使用executc(),删除数据库数据
示例
<?php
require 'connect.php';
$sql = 'DELETE FROM `user` WhERE `Id` > ?;';
$stmt=$pdo->prepare($sql);
$id = 329;
$stmt->execute([$id]);
if($stmt->rowCount()>0) echo '成功删除'.$stmt->rowCount().'条记录'; else echo'';
$pod=NULL;
3、 SELECT连接数查询
1.mysqli对数据库的查询:
- 调用connect.php文件。
- 编写sql查询语句$sql =’SELECT * FROM
表名
; - 使用prepare(),执行等待SQL操作。
- 创建$mysqli->prepare()对象
- 执行executc()查询数据库
- 创建$stmt->get_result()对象
- 判断数据库是否为空$result->num_row
- $result->fetch_assoc()返回单条数据
- 使用while循环对数据库中查询的数据集遍历
示例
<?php
require'connect.php';
$sql = 'SELECT * FROM `user`';
$stmt = $mysqli->prepare($sql);
$stmt->execute() or die(error());
$result = $stmt->get_result();
if($result->num_rows===0) echo '数据库为空!';
while($res=$result->fetch_assoc())
{
vprintf('%d:%s | %s | %s<br>',$res);
}
$result->free();
$mysqli->close();
//select 重点
//get_result 创建mysqliget_result 对象
//fetch_assoc() 以关联返回单条数据
//free() 释放结果集
2.mysqli对数据库的查询:
- 调用connect.php文件。
- 编写sql查询语句$sql =’SELECT
标题
…, FROM表名
WHERE标题
=?; - 使用prepare(),执行等待SQL操作。
- 创建$mysqli->prepare()对象
- 使用bindparm()占位符绑定变量
- 执行executc()查询数据库
- 使用bin_result(),将变量绑定字段
- store->result() 记录集回传
- 判断数据库是否为空$stmt->num_row
- $stmt->fetch() 遍历变量中的字段
- 使用whlie循环对数据库中查询的数据集遍历
示例
<?php
require 'connect.php';
$sql = 'SELECT `username`,`sex`,`mobile` FROM `user` WHERE `id` >?;';
$stmt= $mysqli->prepare($sql);
$stmt->bind_param('i',$id);
$id = 3;
$stmt->execute() or die($stmt->error);
$stmt->bind_result($username,$sex,$mobile);
$stmt->store_result();
if($stmt->num_rows===0) exit('没有要查询的数据');
while($stmt->fetch())
{
printf('%s | %s | %s <br>',$username,$sex,$mobile);
}
//select 重点:
//使用bind_result 字段和变量绑定
// store_result 将所有记录集回传
//fetch 遍历变量中的字段
//个人理解,将bind_result中的记录集回传到$stmt
//使用while将$stmt中的记录集循环输出。
3.mysqli对数据库的查询:
- 调用connect.php文件。
- 编写sql查询语句$sql =’SELECT
标题
…, FROM表名
WHERE标题
=?; - 使用prepare(),执行等待SQL操作。
- 创建$mysqli->prepare()对象
- 使用bind_parm()占位符绑定变量
- 执行executc()查询数据库
- 创建$stmt->get_result()对象
- 判断数据库是否为空$result->num_row
- $result->fetch_all() 符合条件的所有记录集
- 使用foreach循环对数据库中查询的数据集遍历
示例
<?php
require 'connect.php';
$sql = 'SELECT `username` FROM `user` WHERE `Id`>?;';
$stmt= $mysqli->prepare($sql);
$stmt->bind_param('i',$id);
$id = 3;
$stmt->execute() or die($stmt->error);
$result=$stmt->get_result();
if($result->num_rows===0) exit('数据库为空');
foreach($res=$result->fetch_all() as $user)
{
vprintf('%s<br>',$user);
}
$result->free();
$mysqli->close();
//select foreach 重点:
//创建get_result对象,使用fetch_all获得记录集,使用foreach循环输出
4.PDO对数据库的查询:
- 调用connect.php文件。
- 编写sql查询语句$sql =’SELECT
标题
…, FROM表名
WHERE标题
=?; - 使用prepare(),执行等待SQL操作。
- 创建$pdo->prepare()对象
- 条件赋值
- $stmt->fetch() 遍历变量中的字段
- 使用while循环对数据库中查询的数据集遍历
示例
<?php
require 'connect.php';
$sql="SELECT * FROM `user` WHERE `id` > ?";
$stmt = $pdo->prepare($sql);
$id =0;
$stmt->execute([$id]);
while ($user = $stmt->fetch()) {
echo $user['username'].'<br>';
}
$pdo=NULL;
5.PDO对数据库的查询:
- 调用connect.php文件。
- 编写sql查询语句$sql =’SELECT
标题
…, FROM表名
WHERE标题
=?;’; - 使用prepare(),执行等待SQL操作。
- 创建$pdo->prepare()对象
- 条件赋值
- $stmt->fetchAll() 遍历数条件据表
- 使用foreach循环对数据库中查询的数据集遍历
示例
<?php
require 'connect.php';
$sql="SELECT * FROM `user` WHERE `id` > ?";
$stmt = $pdo->prepare($sql);
$id =0;
$stmt->execute([$id]);
foreach($res=$stmt->fetchAll() as $value)
{
echo $value['username'].'<br>';
}
$pdo->NULL;
6.PDO对数据库的查询:
- 调用connect.php文件。
- 编写sql查询语句$sql =’SELECT
标题
…, FROM表名
WHERE标题
=?;’; - 使用prepare(),执行等待SQL操作。
- 创建$pdo->prepare()对象
- 条件赋值
- 执行execute();
- 使用bindColumn对条件赋值。
- $stmt->fetch(PDO::FETCH_BOUND)返回结果集给bindColumn()
- 使用While循环对数据库中查询的数据集遍历
示例
<?php
require "connect.php";
$sql='SELECT * FROM `user` WHERE `id` > ?;';
$stmt=$pdo->prepare($sql);
$id=1;
$stmt->execute([$id]);
$stmt->bindColumn('username',$username);
$stmt->bindColumn('password',$password);
$stmt->bindColumn('age',$age);
$stmt->bindColumn('sex',$sex);
$stmt->bindColumn('email',$email);
$stmt->bindColumn('mobile',$mobile);
while($stmt->fetch(PDO::FETCH_BOUND))
{
printf('%s|%s|%s|%s|',$username,$sex,$age,$mobile);
echo "<br>";
}
$pdo=NULL;
- 7 PDO 数据库记数
- count函数是用来统计表中或数组中记录的一个函数
- 使用count对sql的记录集统计
- 使用bindColumn() count赋值
- 使用PDO::FETCH_BOUND返回count记录集的数量
- 说明:统计方式不会报错或无显。
$sql = 'SELECT COUNT(`id`) AS `count` FROM `user` WHERE `id` >?;';
$stmt=$pdo->prepare($sql);
$id=1;
$stmt->execute([$id]);
$stmt ->bindColumn('count',$count);
$stmt ->fetch(PDO::FETCH_BOUND);
echo '查询到了'.$count.'条记录';
$pdo =null;