《php面向对象》 第7课:封装DB类-2

在db类中除了完成数据库连接和关闭外,剩下的就是实现数据的增删改查了。

接下来,我们要完成的就是数据的增加。

1、必须会书写添加记录的sql指令

INSERT INTO `student`(`no`, `name`, `sex`, `age`) VALUES ('183001','张三','男',20)

2、我们在类中需要定义一个方法add,来完成记录的添加。该方法主要实现:将调用者传递的数据,变成sql指令,最后执行sql指令,并返回结果。

<?php

/**
 * 数据库操作类,文件名:Db.class.php
 */
class Db
{

    private $conn; //保存数据库连接资源

    //构造方法:主要实现数据库连接,设置编码格式,并把数据库连接对象conn保存到属性中,为其他方法使用
    function __construct($dbname, $usr, $pwd, $host = "127.0.0.1", $port = 3306, $coding = 'utf8')
    {
      //省略
    }

    //析构方法:不会有任何参数
    function __destruct()
    {
      //省略
    }

    /**
     * @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;
    }
}

封装add方法最关键的第一步:选择合适的算法,构建正确sql指令。

在这里,我们采用遍历数组的方式,依次取出每个元素的键和值。

有一些细节必须注意:

  • 为防止有一些字段与sql关键字冲突,我们在字段上加了反引号
  • 传递的数据,如果是字符串,其值不能包括引号,否则会出错。这也是这种算法的缺陷之处。

我们来看看,如何来调用类中的add方法。因为add方法需要两个参数,所以我们也传递两个参数。

<?php
/**
 * 测试文件 test.php
 */
require_once "Db.class.php";

$db = new Db("myschool",'root','');
//合法的数据
$db->add('student',['no'=>'1831001','name'=>'张三','sex'=>'男','age'=>20]);

//非法的数据,'"张"三'
$db->add('student',['no'=>'1831003','name'=>'"张"三','sex'=>'男','age'=>19]);

第二个add方法传递的数据中包含了引号,最终构建出的sql指令insert into student (`no`,`name`,`sex`,`age`) values ("1831003",""张"三","男","19"),这样的sql指令执行就会出错误。

封装add方法关键的第二步:就是如何执行sql指令

        //执行sql指令
        $ret = mysqli_query($this->conn,$sql);
        return $ret;

mysqli_query 返回结果:针对成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,将返回一个 mysqli_result 对象。针对其他成功的查询,将返回 TRUE。如果失败,则返回 FALSE。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李 书 明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值