一、 MySQL天龙八部
1.连接数据库
mysqli_connect(主机,用户名,密码)
@:不显示系统错误
$link = @mysqli_connect('localhost','root','');
2.判断是否连接成功
一般只是处理出现错误的情况。如果错误处理完成之后继续向后。
mysqli_connect_error()
mysqli_connect_errno()
if($link===false){
echo mysqli_connect_error($link);
echo mysqli_connect_errno($link);
die;
}
3.选择数据库
mysqli_select_db()
mysqli_error()
mysqli_errno()
$res = mysqli_select_db($link,'xmr');
if($res===false){
echo mysqli_error($link);
echo mysqli_errno($link);
die;
}
4.设置字符集
mysqli_set_charset()
$res = mysqli_set_charset($link,'utf8');
if($res===false){
echo mysqli_error($link);
echo mysqli_errno($link);
die;
}
5.准备SQL语句
$sql = 'select * from student;';
6.执行SQL
mysqli_query();
$res = mysqli_query($link,$sql);
if($res===false){
echo mysqli_error($link);
echo mysqli_errno($link);
die;
}
7.处理结果集
从结果集中取得行,一条条获取
mysqli_fetch_row()
从结果集中取得一行作为数字数组或关联数组
mysqli_fetch_array()
// 数字数组
$row=mysqli_fetch_array($result,MYSQLI_NUM);
// 关联数组
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);
从结果集中取得一行作为关联数组
mysqli_fetch_assoc()
从结果集中取得所有行作为关联数组
mysqli_fetch_all()
// 获取数据
mysqli_fetch_all($result,MYSQLI_ASSOC);
假设 websites 表有一个自动生成的 ID 字段。返回最后一次查询中的 ID
mysqli_insert_id()
从不同的查询中输出所影响记录行数
mysqli_affected_rows()
8.释放资源关闭数据库连接
mysqli_free_result()
mysqli_close();
二、 代码重用的办法
1.代码包含
将基础代码比如连接,选择数据库,设置字符集写在一个文件中,需要使用的地方直接引用进来。
1) 添加数据
先创建一个文章数据表:
CREATE TABLE `article` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL COMMENT '文章的标题',
`content` text NOT NULL COMMENT '文字的内容',
`user_name` varchar(30) NOT NULL COMMENT '用户名',
`add_time` datetime NOT NULL COMMENT '添加时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建前端页面:
设计后端的逻辑处理:
2) 查看发表的文章
3) 文章列表
4) 文章的删除
2.函数封装
1) 数据连接函数
需要做什么: 连接数据 设置字符集 选择数据库
返回: 连接的资源
函数的参数: 主机 端口 用户名 密码 字符集 数据库
默认值: 端口 字符集 默认值一般设计在函数的最后
/*
*@desc 数据库连接函数
*@param $host string 数据库的主机地址
*@param $user string 数据库的用户名
*@param $pass string 数据库的密码
*@param $db_name string 数据库的数据库名称
*@param $port int 数据库的端口 默认3306
*@param $charset string 字符集 默认utf8
*@return false | $link bool|object 连接失败|连接的资源
*/
function db_connect($host,$user,$pass,$db_name,$port=3306,$charset='utf8'){
global $error;
global $errno;
//判断端口是否默认
if($port!=3306){
$host = $host . ':' . $port;
}
//1. 连接数据库
$link = @mysqli_connect($host,$user,$pass);
//2. 判断是否连接成功
if($link===false){
$error = mysqli_connect_error($link);
$errno = mysqli_connect_errno($link);
return false;
}
//3. 选择数据库
$res = mysqli_select_db($link,$db_name);
if($res===false){
$error = mysqli_error($link);
$errno = mysqli_errno($link);
return false;
}
//4. 设置字符集
$res = mysqli_set_charset($link,$charset);
if($res===false){
$error = mysqli_error($link);
$errno = mysqli_errno($link);
return false;
}
return $link;
}
2) 错误处理函数
/*
*@desc 获取错误信息
*@return array 错误信息数组
*/
function get_error(){
global $error;
global $errno;
global $debug;
if($debug){
return [
'error' => $error,
'errno' => $errno
];
}
}
3) 插入函数
/*
* @desc db_insert 数据库插入操作
* @param Slink object 数据库的连接资源
* @param Stable string 数据表
* @param $data array 要插入的数据
* @param $get_ id bool 是否需要返回插入行的ID
* @return bool/int bool 表示是否插入成功,int表示插入行的ID
*/
function db_insert($link, $table, $data, $get_id=false) {
global $error;
global $errno;
if(!is_array($data)) {
$error = ' 数据库数据的插入格式不合法,必须是数组格式' ;
$errno = 1001;
return false;
}
$data = parse_array($data) ;
$fildes = implode(', ' ,array_keys($data)) ;
$values = implode(', ' ,array_values($data)) ;
$sql = "insert into {$table} ({$fildes}) values ({$values}) ;";
//执行SQL
$rs = mysqli_query ($link, $sql) ;
if($rs===false) {
$error = 'sq1 语法错误';
$errno = 1002;
return false;
}
if($rs && mysqli_affected_rows($link)) {
if($get_id) {
return mysqli_insert_id($link) ;
}
return true ;
}
$error = '插入的数据不匹配';
$errno = 1003;
return false;
}
9) 删除函数
/*
*@desc delete 数据库刪除操作
*@param $link object 数据库连接资源
*@param $table string 数据表
*@param $where string 条件
*@retuan bool true 表示刪除成功
*/
function db_delete($link, $table, $where) {
global $error;
global $errno;
if(!is_string ($where)) {
$error = '刪除条件珸法不正碗,必須是字符串格式';
$errno = 1004;
return false;
}
$sql = "delete from {$table} where $where";
$rs = mysqli_query ($link, $sql);
if($rs=== false){
$error = 'sql 语法错误';
$errno = 1002;
return false;
}
if($rs && mysqli_affected_rows($link)) {
return true;
}
$error = ' 未找到刪除的数据';
$errno = 1005;
return false;
}
10) 更新函数
/**
*@desc 更新操作
*@param $link object 连接状态
*@param $table string 数据表
*@param $set mixd 要修改的数据数组/字符串
*@param $where string 更新条件
*/
function db_update ($link, $table, $set, $where) {
global $error;
global $errno;
if(!is_string($where)) {
$error ='跟新条件语法不正确,必须是字符串格式';
$errno = 1007;
return false;
}
if(is_array($set)){
$set = parse_array($set);
$set = parset_set ($set);
}
//如果输入和字符串都不是的话,错误处理
if(!is_string($set)){
$error = '更新新语法错误';
$errno = 1006;
return false;
}
$sql = "update {$table} set {$set} where $where; ";
$res = mysqli_query ($link, $sql) ;
//判断语法是否错误
if($res===false) {
$error = 'sql 语法错误';
$errno = 1002;
return false;
}
//正确更新返回true
if($res && mysqli_affected_rows($link)) {
return true ;
}
//没有跟新的内容
return true;
}
12) 查询函数
/*
*@desc select 数据库查询操作
*@param $fields string 数据库的字符段
*@param $table string 结果集类型
*@param $where string 条件
*@param $group string 以字段进行分组
*@param $having string 将执行$group后返回的结果再次进行过滤
*@param $order string 排序
*@param $limit string 限制条件
*@retuan bool true 表示查询成功
*/
function db_select($link, $fields, $table , $arr_type,$where=null, $group=null, $having=null, $order=null, $limit=null){
if(is_string($table)){
$table = $table;
}else if(is_array($table)){
$tables = implode(',',$table);
}
if(is_string($fields)) {
$fields = $fields;
}else if(is_array($fields)){
$fields = implode(',',$fields);
}
$sql = "select {$fields} from {$table}";
if($where){
if(!is_string ($where)){
$error = '刪除条件珸法不正碗,必須是字符串格式';
$errno = 1004;
return false;
}
$sql .= " where {$where}";
}
if ($group) {
$sql .= " group by $group";
}
if($having) {
$sql .= " having {$having}";
}
if($order){
$sql .= " order by {$order}";
}
if($limit){
$sql .= " limit {$limit}";
}
$res = mysqli_query($link, $sql);
if($res && mysqli_num_rows($res)){
return mysqli_fetch_all($res, $arr_type);
}
return false;
}
三、创建php项目文件
- pro
- common:封装
- lib:库
- config:配置文件
- upload:上传资源
- api:接口返回
- index:前端
- admin:后端
- static:静态文件
- css
- js
- html