前面几节课,我们简单的封装了DB类,目的是练习类的封装。
我们封装的DB类,功能非常简单,也要许多考虑不周之处,在实际项目中,还需要添加很多功能。
<?php
/**
* 数据库操作类,文件名:Db.class.php
*/
class Db
{
private $conn; //保存数据库连接资源
//构造方法:主要实现数据库连接,设置编码格式,并把数据库连接对象conn保存到属性中,为其他方法使用
function __construct($dbname, $usr, $pwd, $host = "127.0.0.1", $port = 3306, $coding = 'utf8')
{
//建议使用mysqli,连接mysql数据库
$conn = mysqli_connect($host, $usr, $pwd, $dbname, $port);
if (mysqli_connect_errno($conn)) {
echo "连接数据库失败: " . mysqli_connect_error();
}
// 设置数据库连接字符集
mysqli_set_charset($conn, $coding);
$this->conn = $conn;
echo '连接数据库成功';
}
//析构方法:不会有任何参数
function __destruct()
{
//关闭数据库连接,放在析构方法中最合适不过了
mysqli_close($this->conn);
// echo "<br/>断开数据库连接";
}
/**
* @param $table 数据表名
* @param $data 添加的数据,关联数组类型 格式为:['no'=>'1001','name'=>'张三',]
*/
function add($table, $data)
{
if (!is_array($data)) {
die('第二参数必须必须是关联数组');
}
$fields = $values = '';
//遍历$data,构建字段列表和值列表
foreach ($data as $k => $v) {
$fields .= '`' . $k . '`,';
$values .= '"' . $v . '",';
}
//去除末尾的逗号
$fields = rtrim($fields, ',');
$values = rtrim($values, ',');
//构建sql指令
$sql = "insert into {$table} ($fields) values ($values)";
//输出sql指令,测试是否正确
// echo $sql;
//执行sql指令
$ret = mysqli_query($this->conn, $sql);
return $ret;
}
/**
* 更新记录
* @param $table 表名
* @param $data 数据, 数据类型:字符串、关联数组
* @param $where 更新条件,数据类型:关联数组
*/
function update($table, $data, $where = '1=1')
{
if (!is_array($data)) {
die('第二个参数必须是数组');
}
$values = '';
foreach ($data as $k => $v) {
$values .= "{$k}='{$v}',";
}
$values = rtrim($values, ',');
$condition = '';
if (is_array($where)) {
foreach ($where as $k => $v) {
$condition .= " {$k}='{$v}' and";
}
$condition = substr($condition, 0, -3);
} else {
$condition = $where;
}
$sql = "update {$table} set {$values} where {$condition}";
$ret = mysqli_query($this->conn, $sql);
return $ret;
}
/**
* 查询记录
* @param $table 表名
* @param array $where 查询条件,可以是字符串,也可以是数组
* @param string $fields 查询字段
* 返回二维数组
*/
function getAll($table, $fields = "*", $where = '1=1')
{
$condition = '';
if (is_array($where)) {
foreach ($where as $k => $v) {
$condition .= " {$k}='{$v}' and";
}
$condition = substr($condition, 0, -3);
} else {
$condition = $where;
}
$sql = "select {$fields} from {$table} where $condition";
$ret = mysqli_query($this->conn, $sql);
$arr = [];
while ($row = mysqli_fetch_assoc($ret)) {
$arr[] = $row;
}
return $arr;
}
}
上面的代码,还差一个删除功能,请同学们自己封装删除方法del( )
提示:删除方法需要传递两个参数:
$table : 数据表名
$where: 删除的条件