当前位置:   article > 正文

php mysql类_php数据库功能类-mysql类

php mysql 类

配置文件和Mysql类

一.创建Mysql类

1.本身我们将使用PDO来操控数据库,而不管哪种数据库引擎,直接操作都比较松散,所以我们有必要做适当的封装(封装过度也会导致学习成本过高,适当就好)。

2.创建一个方法端mysql.php的类。

//MySQL数据库类

class Mysql

{

}

3.创建对外的调用端1.php引入方法端数据库mysql.php

//引入数据库类

require 'mysql.php';

$Mysql = new Mysql();

4.创建类中的构造方法,构造方法里通过PDO来连接数据库。

方法端mysql.php类:

48304ba5e6f9fe08f3fa1abda7d326ab.png

//构造方法,自动连接PDO

//数据库类

class Mysql

{

//构造方法,自动PDO连接数据库

public function __construct()

{

try {

//连接MySQL数据库

$pdo = new PDO('mysql:host=localhost;dbname=example', 'xixi','123456');

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

测试是否链接成功:http://192.168.3.62/Example/mysql/1.php

二.配置文件

1.数据库配置信息直接在mysql.php文件中,当移植或配置其他数据库服务器时,需要经常改动这里,带来麻烦。我们需要创建一个配置文件config.php,来统一处理所有配置信息。

2.创建config.php,使用return array()数组方式配置信息。

48304ba5e6f9fe08f3fa1abda7d326ab.png

//返回配置文件数组

return array(

//数据库配置

'DB_HOST' => 'localhost', //服务器地址

'DB_NAME' => 'example', //数据库名

'DB_USER' => 'xixi', //用户名

'DB_PASS' => '123456' //密码

);

48304ba5e6f9fe08f3fa1abda7d326ab.png

3.将配置信息config.php引入到Mysql.class.php类中去。

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//构造方法,自动PDO连接数据库

public function __construct()

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php测试是否连接成功

三.内部实例化

1.如果每次都要在外部进行new Mysql();这样看上去显得麻烦,也难受。

2.我们可以在方法端mysql.php的内部通过静态方法进行实例化,外部直接调用这个方法,即完成了实例化的过程。

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//构造方法,自动PDO连接数据库

public function __construct()

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function stmt()

{

//返回出一个对象

return new self();

}

public function test()

{

echo 'test';

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

3.通过外部调用端1.php调用Mysql类。

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::stmt();

//调用

$Mysql->test();

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php查看测试

test

数据库功能类-封装新增方法

通过一个简单的传递参数,即可智能实现数据新增。

一.调用猜想

1.如果使用过一些框架,它们就把增删改查进行了有效的封装。

2.通过实例化,将调用端1.php和方法端mysql.php关联的数据表关联上。

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql();

打印出$Mysql这个对象测试

var_dump($Mysql);

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php查看测试

object(Mysql)[1]

3.字段和值,通过数组传递。

给对外的调用端1.php新增数据,通过数组传递方式把字段和值传进去:

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象,给这个ex_user表传值

$Mysql = Mysql::mysql('ex_user');

//新增数据,通过数组实现字段和值的对应

$data = array(

'name' => '西西',

'age' => 29,

'create_time' => date('Y-m-d H:i:s')

);

//写入数据库,并返回当前最新的ID值

echo $Mysql->add($data);

48304ba5e6f9fe08f3fa1abda7d326ab.png

二.方法端mysql.php逐步实现数据库封装新增方法

第一步:在Mysql类中,创建一个新增方法,数据库新增字段数组

48304ba5e6f9fe08f3fa1abda7d326ab.png

public function add($data)

{

//通过array_keys得到字段数组$keys,不管传多少值只要得到$keys就行了

$keys = array_keys($data);

//打印$keys值查看

print_r($keys);

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

查看:

Array ( [0] => name [1] => age [2] => create_time )

第二步:新增方法关联的表和PDO对象,需要在构造方法里保存。

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//构造方法,自动PDO连接数据库

public function __construct()

{

try {

//保存PDO对象为属性

$this->pdo = $pdo;

}

}

//数据库新增操作

public function add($data)

{

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

第三步:实现sql语句写入到数据库

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库实现新增

public function add($data)

{

//SQL新增

$sql = "INSERT INTO ex_user (name, age, create_time) VALUES ('西西',18,NOW())";

//执行SQL语句

$this->pdo->prepare($sql)->execute();

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

第四步:sql写入到数据库后返回一个写入的ID

//数据库新增操作

public function add($data)

{

//返回最新的ID值

return $this->pdo->lastInsertId();

}

第五步:将字段数组加上防止冲突的`符号,得到字段字符串

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库新增操作

public function add($data)

{

//得到字段数组

$keys = array_keys($data);

//将字段数组加上防止冲突的`符号

foreach ($keys as $key=>$value) {

$keys[$key] = '`'.$value.'`';

}

//得到字段字符串

$fields = implode(',', $keys);

echo $fields;

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

通过echo $fields打印查看得到字段字符串:

`name`,`age`,`create_time`

第六步:得到值字符串,给值字符串加上单引号

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库新增操作

public function add($data)

{

//给值字符串加上单引号

foreach ($data as $key=>$value) {

$data[$key] = "'".$value."'";

}

//得到值字符串

$values = implode(',', $data);

echo $values;

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

通过echo $values打印查看将要写入到数据库值字符串

'西西','29','2018-03-02 09:49:31'

第七步:在所有的方法里共享表名ex_user

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//将表名保存至属性

private $table;

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//保存数据表名,加上单引号防止出错

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

//数据库新增操作

public function add($data)

{

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

第八步:通过得到的第五步字段字符串,第六步值字符串,第七步ex_user表名重组SQL语句

//数据库新增操作

public function add($data)

{

//重组SQL语句

$sql = "INSERT INTO $this->table ($fields) VALUES ($values)";

}

最后整理最终代码::

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

//数据库新增操作

public function add($data)

{

//得到字段数组

$keys = array_keys($data);

//将字段数组加上防止冲突的`符号

foreach ($keys as $key=>$value) {

$keys[$key] = '`'.$value.'`';

}

//得到字段字符串

$fields = implode(',', $keys);

//给值字符串加上单引号

foreach ($data as $key=>$value) {

$data[$key] = "'".$value."'";

}

//得到值字符串

$values = implode(',', $data);

//SQL新增

$sql = "INSERT INTO $this->table ($fields) VALUES ($values)";

//执行SQL语句

$this->pdo->prepare($sql)->execute();

//返回最新的ID值

return $this->pdo->lastInsertId();

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

数据库功能类-封装修改方法

一.封装修改

调用端1.php俩种修改方式通过提交的ID判断条件或自定义判断条件

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//可以直接通过提交的ID判断条件或自定义判断条件。修改数据id筛选传递

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//将要修改的数据,有两种方式修改

$data = array(

'id' => 1,

'name' => '西西',

'age' => 18

);

//修改数据库,并返回当前影响行数(返回大于0,说明修改成功)

//方式一:提交的ID判断条

echo $Mysql->update($data);

//方式二:通过array('name'=>'西西')自定义判断条件

echo $Mysql->update($data, array('name'=>'西西'));

48304ba5e6f9fe08f3fa1abda7d326ab.png

方法部分mysql.php可以支持ID或自定义判断

实现步骤:

第一步:测试mysql.php输出的sql语句格式是否正确

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库修改操作

public function update($data)

{

//重组SQL语句

$sql = "UPDATE $this->table SET xxx=xxx,xxx=xxx WHERE xx=xx";

echo $sql;

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php测试输出$sql语句格式

UPDATE `ex_user` SET xxx=xxx,xxx=xxx WHERE xx=xx

第二步:分离数组中的id和其他字段

(1)得到$idWhere

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库修改操作

public function update($data)

{

//初始化id条件等于空

$idWhere = '';

//先通过array_key_exists这个函数判断有没有id这个字段

//最后分离数组中的id和其他字段

if (array_key_exists('id', $data)) {

//$idWhere得到初始化的id条件

$idWhere = "(`id`='{$data['id']}')";

}

//重组SQL语句

$sql = "UPDATE $this->table SET xxx=xxx,xxx=xxx WHERE $idWhere";

//输出当前重组的SQL语句

echo $sql;

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php测试输出$sql语句格式测试输出$sql语句

UPDATE `ex_user` SET xxx=xxx,xxx=xxx WHERE (`id`='1')

第三步:得到将要修改的$key和$value的值

方式一:通过id条件得到将要修改的$key和$value的值

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库修改操作

public function update($data)

{

//初始化id条件

$idWhere = '';

//修改字符串

$update = '';

//先分离数组中的id和其他字段

if (array_key_exists('id', $data)) {

$idWhere = "(`id`='{$data['id']}')";

}

//使用id条件判断

$where = $idWhere;

//得到剔除id索引的数组

unset($data['id']);

//将字段数组加上防止冲突的`符号

foreach ($data as $key=>$value) {

$update .= "`$key`='$value',";

}

//去掉最后的逗号

$update = substr($update, 0, -1);

//重组SQL语句

$sql = "UPDATE $this->table SET $update WHERE $where";

//输出当前重组的SQL语句

echo $sql;

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php查看测试

UPDATE `ex_user` SET `name`='西西',`age`='18' WHERE (`id`='1')

方式二:通过array('name'=>'西西')传的参数得到将要修改$key和$value的值

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库修改操作

public function update($data, $otherWhere = [])

{

//初始化id 条件

$idWhere = '';

//修改字符串

$update = '';

//先分离数组中的id和其他字段

if (array_key_exists('id', $data)) {

$idWhere = "(`id`='{$data['id']}')";

}

//如果没有指定otherWhere,则使用id

if (empty($otherWhere)) {

//使用id 条件判断

$where = $idWhere;

} else {

//使用指定条件判断

$key = key($otherWhere);

$value = current($otherWhere);

$where = "(`$key`='$value')";

}

//得到剔除id 索引的数组

unset($data['id']);

//将字段数组加上防止冲突的`符号

foreach ($data as $key=>$value) {

$update .= "`$key`='$value',";

}

//去掉最后的逗号

$update = substr($update, 0, -1);

//重组SQL语句

$sql = "UPDATE $this->table SET $update WHERE $where";

//输出当前重组SQL语句查看

echo $sql;

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php查看测试

UPDATE `ex_user` SET `name`='西西',`age`='18' WHERE (`name`='西西')

最终方法部分mysql.php语句:

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

//数据库修改操作

public function update($data, $otherWhere = [])

{

//初始化id 条件

$idWhere = '';

//修改字符串

$update = '';

//先分离数组中的id 和其他字段

if (array_key_exists('id', $data)) {

$idWhere = "(`id`='{$data['id']}')";

}

//如果没有指定otherWhere,则使用id

if (empty($otherWhere)) {

//使用id 条件判断

$where = $idWhere;

} else {

//使用指定条件判断

$key = key($otherWhere);

$value = current($otherWhere);

$where = "(`$key`='$value')";

}

//得到剔除id 索引的数组

unset($data['id']);

//将字段数组加上防止冲突的`符号

foreach ($data as $key=>$value) {

$update .= "`$key`='$value',";

}

//去掉最后的逗号

$update = substr($update, 0, -1);

//重组SQL语句

$sql = "UPDATE $this->table SET $update WHERE $where";

//得到准备语句

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//返回影响行数

return $stmt->rowCount();

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

数据库功能类-封装删除方法

调用端1.php可以直接传递ID值或条件判断的键值对数组。

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//删除数据,默认id 筛选或传递指定条件,并返回影响行数

//方式一:通过id条件删除的$key和$value的值

echo $Mysql->delete(12);

//方式二:指定name=西西的删除

echo $Mysql->delete(array('name'=>'西西'));

48304ba5e6f9fe08f3fa1abda7d326ab.png

方法端mysql.php删除的俩种方式

方式一:通过id条件删除的$key和$value的值

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库删除操作

public function delete($param)

{

//使用id 条件判断

$where = "(`id`='$param')";

//重组SQL

$sql = "DELETE FROM $this->table WHERE $where";

//得到准备语句

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//返回影响行数

return $stmt->rowCount();

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

方式二:指定name=西西的删除

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库删除操作

public function delete($param)

{

//判断参数是否是数字ID,还是数组

if (is_array($param)) {

//使用指定条件判断

$key = key($param);

$value = current($param);

$where = "(`$key`='$value')";

} else {

//使用id 条件判断

$where = "(`id`='$param')";

}

//重组SQL

$sql = "DELETE FROM $this->table WHERE $where";

//得到准备语句

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//返回影响行数

return $stmt->rowCount();

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

最终完整mysql.php语句:

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

//数据库删除操作

public function delete($param)

{

//判断参数是否是数字ID,还是数组

if (is_array($param)) {

//使用指定条件判断

$key = key($param);

$value = current($param);

$where = "(`$key`='$value')";

} else {

//使用id 条件判断

$where = "(`id`='$param')";

}

//重组SQL

$sql = "DELETE FROM $this->table WHERE $where";

//得到准备语句

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//返回影响行数

return $stmt->rowCount();

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

封装数据库功能类-单查询和多查询

一.封装单一查询

单一查询基本上需要where条件判断,一般默认都是通过ID操作的。

实现步骤:

第一步:测试方法端mysql.php输出的sql语句格式是否正确:

48304ba5e6f9fe08f3fa1abda7d326ab.png

//单一查询方法

public function find()

{

//SQL语句

$sql = "SELECT id,name,age,create_time FROM $this->table WHERE id=1";

//打印查询的语句

echo $sql;

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php增加单一查询模式:

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//单一查询模式

$Mysql->find();

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端执行的1.php测试输出的sql语句

SELECT id,name,age,create_time FROM `ex_user` WHERE id=1

第二步:方法端mysql.php得到将要查询的id值($where)

48304ba5e6f9fe08f3fa1abda7d326ab.png

//单一查询方法

public function find($param)

{

//得到where条件

$where = $this->getParam($param);

//带$where的SQL语句

$sql = "SELECT id,name,age,create_time FROM $this->table WHERE $where";

//打印查询的语句

echo $sql;

}

//重复的ID条件代码内部调用,包裹成私有化方法

private function getParam($param)

{

//判断参数是否是数字ID,还是数组

if (is_array($param)) {

//使用指定条件判断

$key = key($param);

$value = current($param);

$where = "(`$key`='$value')";

} else {

//使用id条件判断

$where = "(`id`='$param')";

}

return $where;

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php增加ID数1查看是否可以调用成功

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//单一查询模式

//实现ID=1

$Mysql->find(1);

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端执行的1.php测试输出的sql语句

SELECT id,name,age,create_time FROM `ex_user` WHERE (`id`='1')

第三步:方法端得到mysql.php将要查询的id,name,age,create_time的值($fields)

48304ba5e6f9fe08f3fa1abda7d326ab.png

///单一查询方法

public function find($fields, $param)

{

//得到where条件

$where = $this->getParam($param);

//得到加上`符号的字段,先转换成数组

$fields = $this->getFields($fields);

//加上$this的SQL语句

$sql = "SELECT $fields FROM $this->table WHERE id=$where";

echo $sql;

}

//重复的ID条件代码内部调用,包裹成私有化方法

private function getParam($param)

{

//判断参数是否是数字ID,还是数组

if (is_array($param)) {

//使用指定条件判断

$key = key($param);

$value = current($param);

$where = "(`$key`='$value')";

} else {

//使用id 条件判断

$where = "(`id`='$param')";

}

return $where;

}

//重组fields字段,私有化方法

private function getFields($fields)

{

//给fields 加上`符号

$fields = explode(',', $fields);

//将字段数组加上防止冲突的`符号

foreach ($fields as $key=>$value) {

$fields[$key] = "`$value`";

}

//得到值字符串

$fields = implode(',', $fields);

return $fields;

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php增加ID数1查看id,name,age,create_time是否可以调用成功

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//实现id,name,age,create_time

$Mysql->find('id,name,age,create_time', 1);

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端执行的1.php测试输出的sql语句

SELECT `id`,`name`,`age`,`create_time` FROM `ex_user` WHERE id=(`id`='1')

方法端mysql.php最终通过得到的sql得到准备对象$stmt最终实现单一查询

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

//单一查询方法

public function find($fields, $param)

{

//得到where条件

$where = $this->getParam($param);

//得到加上`符号的字段

$fields = $this->getFields($fields);

//重组SQL语句,LIMIT 1只显示一条

$sql = "SELECT $fields FROM $this->table WHERE $where LIMIT 1";

//得到准备对象

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//返回单一数据

return $stmt->fetchObject();

}

//重复的代码内部调用,私有化方法

private function getParam($param)

{

//判断参数是否是数字ID,还是数组

if (is_array($param)) {

//使用指定条件判断

$key = key($param);

$value = current($param);

$where = "(`$key`='$value')";

} else {

//使用id 条件判断

$where = "(`id`='$param')";

}

return $where;

}

//重组fields字段,私有化方法

private function getFields($fields)

{

//给fields 加上`符号

$fields = explode(',', $fields);

//将字段数组加上防止冲突的`符号

foreach ($fields as $key=>$value) {

$fields[$key] = "`$value`";

}

//得到值字符串

$fields = implode(',', $fields);

return $fields;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php最终实现查询ID=3的姓名

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//最终实现单一查询模式

$object = $Mysql->find('id,name,age,create_time', 3);

//输出姓名

echo $object->name;

48304ba5e6f9fe08f3fa1abda7d326ab.png

二.封装多查询

方法端mysql.php多查询和单查询基本一样,这里不用where

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

//多查询方法

public function select($fields)

{

//得到加上`符号的字段

$fields = $this->getFields($fields);

//重组SQL语句

$sql = "SELECT $fields FROM $this->table";

//得到准备对象

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//初始化列表对象

$objects = [];

//组装数据列表

while ($rows = $stmt->fetchObject()) {

$objects[] = $rows;

}

//返回数据对象数组

return $objects;

}

//重组fields字段,私有化方法

private function getFields($fields)

{

//给fields 加上`符号

$fields = explode(',', $fields);

//将字段数组加上防止冲突的`符号

foreach ($fields as $key=>$value) {

$fields[$key] = "`$value`";

}

//得到值字符串

$fields = implode(',', $fields);

return $fields;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php最终实现多查询

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//多查询,模式

$objects = $Mysql->select('id,name,age,create_time');

//遍历

foreach ($objects as $key=>$obj) {

echo $obj->name.'
';

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

数据库功能类-封装连缀操作

封装连缀功能让where、fields和limit等操作,变得简单易学。

一.为何要连缀

1.如果封装越发复杂,参数传递就越多,学习成本就越大,让开发者摸不着头脑。

2.而连缀模式,可以无限的复杂下去,且不提升学习成本,开发者思路清晰。

二.where连缀

通过where连缀方式删除:

方法端mysql.php实现代码

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//第一步:设置条件属性

private $where;

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

//数据库删除操作

public function delete()

{

//第三步:重组SQL语句保存where为属性即可

$sql = "DELETE FROM $this->table $this->where";

//得到准备语句

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//返回影响行数

return $stmt->rowCount();

}

//第二步:设置where条件

public function where($param)

{

//得到第一组key=value

$key = key($param);

$value = current($param);

//如果没有第二下标,则默认=

$sign = empty($param[0]) ? '=' : $param[0];

//合并成判断条件,保存到属性里去

$this->where = "WHERE (`$key`$sign'$value')";

//返回当前Mysql对象

return $this;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php使用->where()俩种方式删除。

48304ba5e6f9fe08f3fa1abda7d326ab.png

?php

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//第一种调用方式:把条件分离出来,更清晰,把id等于3的删除掉

$condition['id'] = 3;

$Mysql->where($condition)->delete();

//第二种调用方式:默认=号,可以通过这种使用大于号把id大于三的都删除掉

$condition = array('id'=>3, '>');

$Mysql->where($condition)->delete();

48304ba5e6f9fe08f3fa1abda7d326ab.png

通过where连缀方式修改:

方法端mysql.php实现代码

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//第一步:设置条件属性

private $where;

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

//数据库修改操作

public function update($data)

{

//修改字符串

$update = '';

//得到剔除id 索引的数组

unset($data['id']);

//将字段数组加上防止冲突的`符号

foreach ($data as $key=>$value) {

$update .= "`$key`='$value',";

}

//去掉最后的逗号

$update = substr($update, 0, -1);

//重组SQL语句,保存where为属性

$sql = "UPDATE $this->table SET $update $this->where";

//得到准备语句

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//返回影响行数

return $stmt->rowCount();

}

//第二步:设置where条件

public function where($param)

{

//使用指定条件判断

$key = key($param);

$value = current($param);

//如果没有第二下标,则默认=

$sign = empty($param[0]) ? '=' : $param[0];

//合并成判断条件,保存到属性里去

$this->where = "WHERE (`$key`$sign'$value')";

//返回当前Mysql对象

return $this;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php使用->where()方式修改

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//修改数据

$data = array(

'name' => '西西',

'age' => 18

);

//修改数据库,并返回当前影响行数(大于0,说明修改成功)

$condition = array('name'=>'小西西');

echo $Mysql->where($condition)->update($data);

48304ba5e6f9fe08f3fa1abda7d326ab.png

三.fields连缀

通过fields连缀方式实现单一查询:

方法端mysql.php实现代码

48304ba5e6f9fe08f3fa1abda7d326ab.png

mysql.php

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//条件属性

private $where;

//第一步:设置字段属性

private $fields = '*';

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

//单一查询方法

public function find()

{

//重组SQL语句

$sql = "SELECT $this->fields FROM $this->table $this->where LIMIT 1";

//得到准备对象

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//返回单一数据

return $stmt->fetchObject();

}

//所有的where条件都在这里

public function where($param)

{

//使用指定条件判断

$key = key($param);

$value = current($param);

//如果没有第二下标,则默认=

$sign = empty($param[0]) ? '=' : $param[0];

//合并成判断条件,保存到属性里去

$this->where = "WHERE (`$key`$sign'$value')";

//返回当前Mysql对象

return $this;

}

//第二步:设置fields直接复制,并保存属性,方便调用

public function fields($fields)

{

//给fields 加上`符号

$fields = explode(',', $fields);

//将字段数组加上防止冲突的`符号

foreach ($fields as $key=>$value) {

$fields[$key] = "`$value`";

}

//得到值字符串

$this->fields = implode(',', $fields);

//Mysql对象

return $this;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php使用fields连缀实现查询

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//单一查询,模式

$condition = array('id'=>1);

$object = $Mysql->where($condition)->find();

echo $object->name;;

48304ba5e6f9fe08f3fa1abda7d326ab.png

通过fields连缀方式实现单一查询:

方法端mysql.php实现代码

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//条件属性

private $where;

//字段属性

private $fields = '*';

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

///多查询方法

public function select()

{

//重组SQL语句

$sql = "SELECT $this->fields FROM $this->table $this->where";

//得到准备对象

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//初始化列表对象

$objects = [];

//组装数据列表

while ($rows = $stmt->fetchObject()) {

$objects[] = $rows;

}

//返回数据对象数组

return $objects;

}

//所有的where条件都在这里

public function where($param)

{

//使用指定条件判断

$key = key($param);

$value = current($param);

//如果没有第二下标,则默认=

$sign = empty($param[0]) ? '=' : $param[0];

//合并成判断条件,保存到属性里去

$this->where = "WHERE (`$key`$sign'$value')";

//返回当前Mysql对象

return $this;

}

//所有的字段设置都在这里

public function fields($fields)

{

//给fields 加上`符号

$fields = explode(',', $fields);

//将字段数组加上防止冲突的`符号

foreach ($fields as $key=>$value) {

$fields[$key] = "`$value`";

}

//得到值字符串

$this->fields = implode(',', $fields);

//Mysql对象

return $this;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php使用fields连缀实现多查询

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//多选模式

$objects = $Mysql->fields('id,name')->select();

foreach ($objects as $key=>$obj) {

echo $obj->name.'
';

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

四.Limit连缀

使用limit连缀方式实现多选模式查询

方法端mysql.php

48304ba5e6f9fe08f3fa1abda7d326ab.png

mysql.php

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//条件属性

private $where;

//字段属性

private $fields = '*';

//limit属性

private $limit;

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

///多查询方法

public function select()

{

//重组SQL语句

$sql = "SELECT $this->fields FROM $this->table $this->where $this->limit";

//得到准备对象

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//初始化列表对象

$objects = [];

//组装数据列表

while ($rows = $stmt->fetchObject()) {

$objects[] = $rows;

}

//返回数据对象数组

return $objects;

}

//所有的where条件都在这里

public function where($param)

{

//使用指定条件判断

$key = key($param);

$value = current($param);

//如果没有第二下标,则默认=

$sign = empty($param[0]) ? '=' : $param[0];

//合并成判断条件,保存到属性里去

$this->where = "WHERE (`$key`$sign'$value')";

//返回当前Mysql对象

return $this;

}

//所有的字段设置都在这里

public function fields($fields)

{

//给fields 加上`符号

$fields = explode(',', $fields);

//将字段数组加上防止冲突的`符号

foreach ($fields as $key=>$value) {

$fields[$key] = "`$value`";

}

//得到值字符串

$this->fields = implode(',', $fields);

//Mysql对象

return $this;

}

//所有的limit 设置都在这里

public function limit($start, $end)

{

//得到Limit 字符串

$this->limit = "LIMIT $start, $end";

//返回当前Mysql 对象

return $this;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php使用limit连缀实现多选模式查询

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//多选模式

$objects = $Mysql->fields('id,name')->limit(0,3)->select();

foreach ($objects as $key=>$obj) {

echo $obj->id.$obj->name.'
';

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

五.order功能

使用order功能实现多选模式查询排序

方法端mysql.php

48304ba5e6f9fe08f3fa1abda7d326ab.png

mysql.php

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//条件属性

private $where;

//字段属性

private $fields = '*';

//limit属性

private $limit;

//order属性

private $order;

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

///多查询方法

public function select()

{

//重组SQL语句

$sql = "SELECT $this->fields FROM $this->table $this->order $this->where $this->limit";

//得到准备对象

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//初始化列表对象

$objects = [];

//组装数据列表

while ($rows = $stmt->fetchObject()) {

$objects[] = $rows;

}

//返回数据对象数组

return $objects;

}

//所有的where条件都在这里

public function where($param)

{

//使用指定条件判断

$key = key($param);

$value = current($param);

//如果没有第二下标,则默认=

$sign = empty($param[0]) ? '=' : $param[0];

//合并成判断条件,保存到属性里去

$this->where = "WHERE (`$key`$sign'$value')";

//返回当前Mysql对象

return $this;

}

//所有的字段设置都在这里

public function fields($fields)

{

//给fields 加上`符号

$fields = explode(',', $fields);

//将字段数组加上防止冲突的`符号

foreach ($fields as $key=>$value) {

$fields[$key] = "`$value`";

}

//得到值字符串

$this->fields = implode(',', $fields);

//Mysql对象

return $this;

}

//所有的limit 设置都在这里

public function limit($start, $end)

{

//得到Limit 字符串

$this->limit = "LIMIT $start, $end";

//返回当前Mysql 对象

return $this;

}

//所有的order设置都在这里

public function order($param)

{

//分割成数组按空格分割,字符和排序关键字

$order = explode(' ', $param);

//组装排序SQL

$this->order = "ORDER BY `$order[0]` ".strtoupper($order[1]);

//返回Mysql对象

return $this;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php使用order功能实现多选模式查询排序

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//多选模式

$objects = $Mysql->fields('id,name')->limit(0,3)->order('id desc')->select();

foreach ($objects as $key=>$obj) {

echo $obj->id.$obj->name.'
';

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

六.countr功能

使用count功能查询总共的条数

方法端mysql.php

48304ba5e6f9fe08f3fa1abda7d326ab.png

mysql.php

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//条件属性

private $where;

//字段属性

private $fields = '*';

//limit属性

private $limit;

//order属性

private $order;

//count属性

private $count;

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`'.$table.'`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function mysql($table)

{

return new self($table);

}

///多查询方法

public function select()

{

//重组SQL语句

$sql = "SELECT $this->fields FROM $this->table $this->order $this->where $this->limit";

//得到准备对象

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//初始化列表对象

$objects = [];

//组装数据列表

while ($rows = $stmt->fetchObject()) {

$objects[] = $rows;

}

//将查询的记录数保存到count属性里

$this->count = $stmt->rowCount();

//返回数据对象数组

return $objects;

}

//所有的where条件都在这里

public function where($param)

{

//使用指定条件判断

$key = key($param);

$value = current($param);

//如果没有第二下标,则默认=

$sign = empty($param[0]) ? '=' : $param[0];

//合并成判断条件,保存到属性里去

$this->where = "WHERE (`$key`$sign'$value')";

//返回当前Mysql对象

return $this;

}

//所有的字段设置都在这里

public function fields($fields)

{

//给fields 加上`符号

$fields = explode(',', $fields);

//将字段数组加上防止冲突的`符号

foreach ($fields as $key=>$value) {

$fields[$key] = "`$value`";

}

//得到值字符串

$this->fields = implode(',', $fields);

//Mysql对象

return $this;

}

//所有的limit 设置都在这里

public function limit($start, $end)

{

//得到Limit 字符串

$this->limit = "LIMIT $start, $end";

//返回当前Mysql 对象

return $this;

}

//所有的order设置都在这里

public function order($param)

{

//分割字符和排序关键字

$order = explode(' ', $param);

//组装排序SQL

$this->order = "ORDER BY `$order[0]` ".strtoupper($order[1]);

//返回Mysql对象

return $this;

}

//返回count

public function count()

{

//返回记录数

return $this->count;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端1.php使用count功能打印查询的条数

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::mysql('ex_user');

//多选模式

$objects = $Mysql->fields('id,name')->limit(0,3)->order('id desc')->select();

foreach ($objects as $key=>$obj) {

echo $obj->id.$obj->name.'
';

}

//count打印有几条

echo $Mysql->count();

48304ba5e6f9fe08f3fa1abda7d326ab.png

数据库功能类-原生方式

1.由于功能的学习成本或是更复杂的无法实现,可以直接提供给开发者原生使用的入口。

方法端mysql.php生成原生方式

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库类

class Mysql

{

//将PDO对象保存至属性

private $pdo;

//将表名保存至属性

private $table;

//条件属性

private $where;

//字段属性

private $fields = '*';

//limit属性

private $limit;

//order属性

private $order;

//count属性

private $count;

//构造方法,自动PDO连接数据库

public function __construct($table)

{

try {

//引入配置文件

$config = require('config.php');

//连接MySQL数据库

$pdo = new PDO('mysql:host=' . $config['DB_HOST'] . ';dbname=' . $config['DB_NAME'], $config['DB_USER'], $config['DB_PASS']);

//设置UTF8字符编码

$pdo->query('SET NAMES UTF8');

//保存PDO对象为属性

$this->pdo = $pdo;

//保存数据表名

$this->table = '`' . $table . '`';

} catch (PDOException $e) {

//输出错误信息

echo $e->getMessage();

}

}

//内部自我实例化,静态方法

public static function getMysql($table = '')

{

return new self($table);

}

//原生执行SQL 语句,返回准备对象

public function query($sql)

{

//得到准备语句

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//返回准备对象

return $stmt;

}

//还可以返回PDO 对象,用于原生时的一些操作

public function getPdo()

{

//返回PDO对象

return $this->pdo;

}

//数据库新增操作

public function add($data)

{

//得到字段数组

$keys = array_keys($data);

//将字段数组加上防止冲突的`符号

foreach ($keys as $key => $value) {

$keys[$key] = '`' . $value . '`';

}

//得到字段字符串

$fields = implode(',', $keys);

//给值字符串加上单引号

foreach ($data as $key => $value) {

$data[$key] = "'" . $value . "'";

}

//得到值字符串

$values = implode(',', $data);

//重组SQL语句

$sql = "INSERT INTO $this->table ($fields) VALUES ($values)";

//执行SQL语句

$this->pdo->prepare($sql)->execute();

//返回最新的ID值

return $this->pdo->lastInsertId();

}

//数据库修改操作

public function update($data)

{

//修改字符串

$update = '';

//得到剔除id 索引的数组

unset($data['id']);

//将字段数组加上防止冲突的`符号

foreach ($data as $key => $value) {

$update .= "`$key`='$value',";

}

//去掉最后的逗号

$update = substr($update, 0, -1);

//重组SQL语句

$sql = "UPDATE $this->table SET $update $this->where";

echo $sql;

//得到准备语句

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//返回影响行数

return $stmt->rowCount();

}

//数据库删除操作

public function delete()

{

//重组SQL

$sql = "DELETE FROM $this->table $this->where";

//得到准备语句

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//返回影响行数

return $stmt->rowCount();

}

//单一查询方法

public function find()

{

//重组SQL语句

$sql = "SELECT $this->fields FROM $this->table $this->where LIMIT 1";

//得到准备对象

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//返回单一数据

return $stmt->fetchObject();

}

//多查询方法

public function select()

{

//重组SQL语句

$sql = "SELECT $this->fields FROM $this->table $this->order $this->where $this->limit";

//得到准备对象

$stmt = $this->pdo->prepare($sql);

//执行SQL语句

$stmt->execute();

//初始化列表对象

$objects = [];

//组装数据列表

while ($rows = $stmt->fetchObject()) {

$objects[] = $rows;

}

//将查询的记录数保存到count属性里

$this->count = $stmt->rowCount();

//返回数据对象数组

return $objects;

}

//所有的where 条件都在这里

public function where($param)

{

//使用指定条件判断

$key = key($param);

$value = current($param);

//如果没有第二下标,则默认=

$sign = empty($param[0]) ? '=' : $param[0];

//合并成判断条件,保存到属性里去

$this->where = "WHERE (`$key`$sign'$value')";

//返回当前Mysql对象

return $this;

}

//所有的字段设置都在这里

public function fields($fields)

{

//给fields 加上`符号

$fields = explode(',', $fields);

//将字段数组加上防止冲突的`符号

foreach ($fields as $key => $value) {

$fields[$key] = "`$value`";

}

//得到值字符串

$this->fields = implode(',', $fields);

//Mysql对象

return $this;

}

//所有的limit 设置都在这里

public function limit($start, $end)

{

//得到Limit 字符串

$this->limit = "LIMIT $start, $end";

//返回当前Mysql 对象

return $this;

}

//所有的order设置都在这里

public function order($param)

{

//分割字符和排序关键字

$order = explode(' ', $param);

//组装排序SQL

$this->order = "ORDER BY `$order[0]` ".strtoupper($order[1]);

//返回Mysql对象

return $this;

}

//返回count

public function count()

{

//返回记录数

return $this->count;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

调用端2.php通过原生方式实现增删改查

48304ba5e6f9fe08f3fa1abda7d326ab.png

//引入数据库类

require 'mysql.php';

//实例化并创建对象

$Mysql = Mysql::getMysql();

//原生删除

$stmt = $Mysql->query('DELETE FROM ex_user WHERE id=2');

echo $stmt->rowCount();

//原生修改

$stmt = $Mysql->query("UPDATE ex_user SET name='西西' WHERE id=1");

echo $stmt->rowCount();

//原生新增

$stmt = $Mysql->query("INSERT INTO ex_user (name,age,create_time) VALUES ('小西西', 17, NOW())");

echo $stmt->rowCount();

echo $Mysql->getPdo()->lastInsertId();

//原生查询

$stmt = $Mysql->query("SELECT id,name,age FROM ex_user");

print_r($stmt->fetchObject());

48304ba5e6f9fe08f3fa1abda7d326ab.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/558119
推荐阅读
相关标签
  

闽ICP备14008679号