1 实现思路
数据库连接认证:将连接认证,选择数据库和设置字符集进行封装。
封装执行SQL语句函数:将增加、删除、修改、查询的SQL传入函数中,执行并返回结果。
封装自动更新函数:将要更新的数据和主键id传入函数中,自动组装SQL进行更新。
封装查询数据函数:根据传入的SQL语句或指定的条件去查询一条记录或者多条记录。
2 实现代码
<?php
// 数据库连接认证:将连接认证,选择数据库和设置字符集进行封装;
function connect($user, $pass, $dbname, &$error, $host = 'localhost', $port = '3306', $charset = 'utf8')
{
$conn= mysqli_connect($host, $user, $pass, $dbname, $port);
if (!$conn) {
$error = mysqli_connect_error();
return false;
}
if (!mysqli_set_charset($conn, $charset)) {
$error = mysqli_error($conn);
return false;
}
return $conn;
}
// 封装执行SQL语句函数:执行SQL语句
function query($conn, $sql, &$error)
{
$res = mysqli_query($conn, $sql);
if ($res === false) {
$error = mysqli_error($conn);
return false;
}
return $res;
}
// 封装执行SQL语句函数:调用query()方法,处理结果集;
function read($conn, $sql, &$error, $all = false) {
$res = query($conn, $sql, $error);
if ($res === false) {
return false;
}
$lists = [];
if ($all) {
while ($row = mysqli_fetch_assoc($res)) {
$lists[] = $row;
}
} else {
$lists = mysqli_fetch_assoc($res);
}
mysqli_free_result($res);
return $lists;
}
// 封装自动更新函数:将更新的数据和主键id传入函数中,自动组装SQL进行更新
function auto_update($conn, $data, $table, &$error, $id = 0){
$set = '';
foreach ($data as $k => $v) {
$set .= $k . "='{$v}',";
}
$set = rtrim($set, ','); // title='title',content='content'
$sql = "UPDATE {$table} SET {$set} ";
if ($id) {
$sql .= ' WHERE `id` = ' . $id;
}
if (query($conn, $sql, $error)) {
return mysqli_affected_rows($conn);
} else {
return false;
}
}
// 封装查询数据函数:执行查询语句;
function auto_read($conn, $table, &$error, $where = [], $all = false){
$where_clause = ' WHERE 1 ';
if ($where) {
foreach ($where as $k => $v) {
$where_clause .= ' AND ' . $k . " = '$v' ";
}
}
$sql = "SELECT * FROM {$table} {$where_clause}";
$res = query($conn, $sql, $error);
if ($res === false) {
return $res;
}
// (省略处理结果集代码)
}
// 封装查询数据函数:处理结果集
function auto_read($conn, $table, &$error, $where = [], $all = false){
// (省略查询语句代码)
$lists = [];
if ($all) {
while ($row = mysqli_fetch_assoc($res)) {
$lists[] = $row;
}
} else {
$lists = mysqli_fetch_assoc($res);
}
mysqli_free_result($res);
return $lists;
}
// 使用:
// 调用封装函数:修改连接数据库和查询作者信息的代码;
include 'Sql.php';
$conn = connect('root', '123456', 'news', $error);
if (!$conn) {
exit($error);
}
$sql = 'SELECT `id`,`name` FROM `author`';
$authors = read($conn, $sql, $error, true);
include 'add.html';
// 调用封装函数:修改连接数据库和添加数据的代码
include 'Sql.php';
$conn = connect('root', '123456', 'news', $error);
if (!$conn) {
exit($error);
}
$sql = 'INSERT INTO `news` VALUES(null, \''. $title. '\', \'' .
$content . '\',' . $a_id . ',' . time() . ')';
$res = query($conn, $sql, $error);