开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第一阶段:封装数据库操作类( SQL 执行检查)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/711/detail/12680
封装数据库操作类(SQL 执行检查)
内容介绍:
一、对 SQL 执行检查的简介
二、代码详解
三、测试
一、对 SQL 执行检查的简介
本课将继续完成封装,初始化的操作已经结束,下一步是针对如何去解决用户使用操作类的业务问题:
发现了基于 mysqli 的操作,所有的数据库的指令执行都是利用 mysqli _query 执行,而执行的过程中都会涉及到 SQL 可能出错的问题,因此把关于 SQL 执行部分(无论增删改查理论上任何操作都要进行数据库的操作),将它单独取出进行错误的检查以及执行(利用 mysqli _query)。
二、代码详解
# SQL 执行以及错误检查
public function check($sql){
//可以是$sql,也可以将 sql 作为属性存起来(无意义),因为 sql 也是其他方法传入的或者是调用传入的
$res = mysqli_ query($this->link, $sql);
//利用 mysqli _query 执行SQL,执行结束后,$sql 是外部传入;$this->link,连接对象;执行完成之后会有结果,该结果可能是布尔[ ture (正确)或者 false(错误),如果出错即为 false],也可能是执行结果查询的结果及对象
#判定错误
if(!$res){
$this->errno = mysqli_ errno($this->1ink); //说明有错
$this->error = mysqli_ error($this->link);
return false;
// sql 从外部传入后,判定对应结果;mysqli_ errno():发现代码中检查的次数很多,给定某个参数进行判定返回false,所以可进行封装,让代码更加简化;返回信息错误,错误信息存入 sql 中,允许用户自行获取
}
return $res;
//假如有错则报错,无错返回正确结果;成功返回结果,可能是布尔 ture (正确)或者是执行结果查询的结果及对象
}
}
三、测试
SQL 执行以及错误检查结束,错误的检查主要是做 SQL 执行检查,至于谁调用 check() 方法,对此并无要求。
1.代码:
#接上述代码(类外测试)
$s1 = new SqL();
#使用默认数据库信息
$db =array(
'host' => ' 192.168.0.1',
‘user ' => 'admin”,
‘pass’=>’admin ' ,
‘dbname' => ' T aobao '
);
$s2 = new SqL ($db) ;
#使用外部数据库信息
$s1- >connect();
$s1->charset();
$s1->check('select * from test');
echo $s1->errno,$s1->error ;
2.详解
添加代码$s1->check('select * from test'),无 test 表,观察是否报错
$s1->check:$s1下的方法 check
发现 bool(true)是连接的过程不需要了解,删除 var_ dump( $s1- >connect());中的 var_ dump(),原因是应该保证连接方法执行才可有结果
修改之后刷新,发现 1146Table‘db_2.test’ 不存在
将 $s1->check('select * from test');代码改为 $s1->check('select * from t_1') ;更新结果
发现 1146Table‘db_2 .t_1’ 表不存在
假如表存在应该是正常的,可实现
将代码 $s1->check('select * from t_1') 改为 $s1->check('select * from t_40');更新结果
结果出现表,说明得到了正确的结果
因为得到正确的结果时,页面中没有信息,所以不会出现错误信息。