新增操作
<?php
namespace chapter2;
use mysqli;
// mysqli面向对象操作数据库
// 新增操作
// 1.链接数据库
// mysql(主机名,用户名,密码,默认数据库);
$mysqli = new mysqli('localhost','root','root','phpedu');
// 2.执行sql语句
$sql = "INSERT `users` SET `name`=?, `email`=?, `password`=?, `register_time`=?";
// 使用的是预处理方式,防止sql注入
$stmt = $mysqli->stmt_init();
// 创建sql语句对象
$stmt->prepare($sql);
// $stmt->bind_param('参数类型',参数列表....);
$user = ['admin','admin@qq.cn',sha1('123456'),time()];
list($name,$email,$password,$register_time) = $user;
$stmt->bind_param('sssi',$name,$email,$password,$register_time);
//执行
$stmt->execute();
// 3.处理执行结果
if($stmt->affected_rows === 1){
echo '添加成功,新记录的主键ID:'.$stmt->insert_id;
}else{
echo '添加失败'.$stmt->error;
}
// 4.结束操作
$stmt->close();
更新操作
<?php
namespace chapter2;
use mysqli;
// mysqli面向对象操作数据库
// 更新操作
// 1.链接数据库
// mysql(主机名,用户名,密码,默认数据库);
$mysqli = new mysqli('localhost','root','root','phpedu');
// 2.执行sql语句
$sql = "UPDATE `users` SET `name`=?, `email`=? where `id`=? ";
// 使用的是预处理方式,防止sql注入
$stmt = $mysqli->stmt_init();
// 创建sql语句对象
$stmt->prepare($sql);
// $stmt->bind_param('参数类型',参数列表....);
$user = ['admin888','admin@qq.cn',8];
list($name,$email,$id) = $user;
$stmt->bind_param('ssi',$name,$email,$id);
//执行
$stmt->execute();
// 3.处理执行结果
if($stmt->affected_rows === 1){
echo '修改成功';
}else{
echo '修改失败'.$stmt->error;
}
// 4.结束操作
$stmt->close();
删除操作
<?php
namespace chapter2;
use mysqli;
// mysqli面向对象操作数据库
// 删除操作
// 1.链接数据库
// mysql(主机名,用户名,密码,默认数据库);
$mysqli = new mysqli('localhost','root','root','phpedu');
// 2.执行sql语句
$sql = "DELETE from `users` where `id`=? ";
// 使用的是预处理方式,防止sql注入
$stmt = $mysqli->stmt_init();
// 创建sql语句对象
$stmt->prepare($sql);
// $stmt->bind_param('参数类型',参数列表....);
$id = 8;
$stmt->bind_param('i',$id);
//执行
$stmt->execute();
// 3.处理执行结果
if($stmt->affected_rows === 1){
echo '删除成功';
}else{
echo '删除失败'.$stmt->error;
}
// 4.结束操作
$stmt->close();
stmt对象查询
<?php
namespace chapter2;
use mysqli;
// mysqli面向对象操作数据库
// 查询1.使用stmt对象
// 1.链接数据库
// mysql(主机名,用户名,密码,默认数据库);
$mysqli = new mysqli('localhost','root','root','phpedu');
// 2.执行sql语句
$sql = "SELECT `id`,`name`,`email` from `users` where `id`>? ";
// 使用的是预处理方式,防止sql注入
$stmt = $mysqli->stmt_init();
// 创建sql语句对象
$stmt->prepare($sql);
// $stmt->bind_param('参数类型',参数列表....);
$id = 2;
$stmt->bind_param('i',$id);
//执行
$stmt->execute();
// 3.处理执行结果
// bind_result():将结果集中的字段|列,绑定到指定的变量上
$stmt->bind_result($id,$name,$email);
// 遍历结果集 fetch():获取当前的记录,并将记录指针自动移到下一条记录
while($stmt->fetch()){
echo "$id:$name ---> $email <br>";
}
// 4.结束操作
// 释放结果集
$stmt->free_result();
// 关闭数据库链接
$stmt->close();
结果集查询
<?php
namespace chapter2;
use mysqli;
// mysqli面向对象操作数据库
// 查询2.使用结果集对象
// 1.链接数据库
// mysql(主机名,用户名,密码,默认数据库);
$mysqli = new mysqli('localhost','root','root','phpedu');
// 2.执行sql语句
$sql = "SELECT `id`,`name`,`email` from `users` where `id`>? ";
// 使用的是预处理方式,防止sql注入
$stmt = $mysqli->stmt_init();
// 创建sql语句对象
$stmt->prepare($sql);
// $stmt->bind_param('参数类型',参数列表....);
$id = 4;
$stmt->bind_param('i',$id);
//执行
$stmt->execute();
// 获取到结果集对象
$result = $stmt->get_result();
// var_dump($result);
// 3.处理执行结果
// 获取一条数据,返回:索引+关联
// $user = $result->fetch_array();
// 获取一条数据,返回:索引
// $user = $result->fetch_row();
// 获取一条数据,返回:关联
// $user = $result->fetch_assoc();
while($user = $result->fetch_assoc()){
echo "{$user['id']} : {$user['name']} ===> {$user['email']} <br>";
}
echo '<hr>';
// 数据表指针复位 归零
$result->data_seek(0);
// 一次性获取到所有记录 $result->fetch_all()
$users = $result->fetch_all(MYSQLI_ASSOC);
// print_r($users);
foreach($users as $user2){
echo "{$user2['id']} : {$user2['name']} ===> {$user2['email']} <br>";
}
// 4.结束操作
// 释放结果集
$result->free_result();
// 关闭数据库链接
$stmt->close();
手写
PDO为例多态
代码部分
<?php
# 接口实战: 使用PDO/MySQLi实现数据库的多态操作
namespace chapter3;
// 配置数据库的连接参数: 接口常量
interface iDbParam
{
const HOST = 'localhost';
const TYPE = 'mysql';
const DBNAME = 'phpedu';
const USER_NAME = 'root';
const PASSWORD = 'root';
const CHARSET = 'utf8';
const PORT = '3306';
}
// 接口构造方法
interface iDbLink
{
// 接口中允许构造方法
public function __construct(...$linkParams);
}
// 接口方法: 后面的代码就是用下面的这个主接口
// 接口之间允许继承, 而且允许多重继承
interface iCURD extends iDbLink, iDbParam
{
// 新增
public function insert(array $data);
// 查询
public function select(string $where = '');
// 更新
public function update(array $data, string $where);
// 删除
public function delete(string $where);
}
<?php
namespace chapter3;
// 用PDO来实现数据库操作
use PDO;
// 加载iCURD的接口声明
require 'demo2.php';
class Db_PDO implements iCURD
{
// 连接对象
private $pdo = null;
// 实现接口中的构造方法:连接数据库
public function __construct(...$linkParams)
{
list($dsn, $username, $password) = $linkParams;
$this->pdo = new PDO($dsn, $username, $password);
}
// 新增
public function insert(array $data)
{
$sql = "INSERT `users` SET `name`=?, `email`=?,`password`=?,`register_time`=?";
$stmt = $this->pdo->prepare($sql);
$stmt->execute($data);
return $stmt->rowCount() === 1 ? '新增成功' : '新增失败';
}
// 查询
public function select(string $where = '')
{
$where = empty($where) ? $where : ' WHERE ' . $where;
$sql = "SELECT * FROM `users` {$where}";
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
// 更新
public function update(array $data, string $where)
{
// 设置更新参数
$params = '';
foreach ($data as $key => $value) {
$params .= "`{$key}` = '{$value}', ";
}
// 将最后的", "去掉
$params = rtrim($params, ', ');
// 执行更新
$sql = "UPDATE `users` SET {$params} WHERE {$where}";
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
return $stmt->rowCount() === 1 ? '更新成功' : '更新失败';
}
// 删除
public function delete(string $where)
{
$sql = "DELETE FROM `users` WHERE {$where}";
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
return $stmt->rowCount() === 1 ? '删除成功' : '删除失败';
}
}
通用类
<?php
namespace chapter3;
// 通用类: 数据库操作,面向接口实现多态, 动态的支持PDO, MySQLi
use chapter3\iCURD;
class DB
{
// 新增
public static function insert(iCURD $db, array $data)
{
return $db->insert($data);
}
// 查询
public static function select(iCURD $db, string $where = '')
{
return $db->select($where);
}
// 更新
public static function update(iCURD $db, array $data, string $where='')
{
return $db->update($data, $where);
}
// 删除
public static function delete(iCURD $db, string $where='')
{
return $db->delete($where);
}
}
pdo操作 接口实现
<?php
namespace chapter3;
// 使用PDO来操作数据库: 接口实现
// 加载PDO操作类: DB_pdo
require 'demo3.php';
// 加载数据库的通用类
require 'demo5.php';
// 先创建DSN
$dsn = iDbParam::TYPE . ':host='.iDbParam::HOST . ';dbname=' . iDbParam::DBNAME . ';charset='.iDbParam::CHARSET;
$link = new DB_pdo($dsn, iDbParam::USER_NAME, iDbParam::PASSWORD);
// // 测试新增操作
echo DB::insert($link, ['郭靖', 'gunjin@php.cn', sha1('123456'), time()]);
// 测试查询
// foreach (DB::select($link, 'id > 2') as $user) {
// echo "{$user['id']} -- {$user['name']} -- {$user['email']} <br>";
// }
// 更新测试
// echo DB::update($link, ['name'=>'朱老师', 'email'=>'zhulaoshi@php.cn'], 'id=10');
// 删除操作
// echo DB::delete($link,'id=10');