收起左侧

[数据库] Discuz二次开发之数据库操作

[复制链接]
LisaCig发表于 2019-11-30 02:15:36
一、discuz数据操作之查:
1、fetch_all
DB::fetch_all(sql, $arg = array());//取出符合条件的所有数据
sql为查询语句,$arg为绑定参数
例:$result = DB::fetch_all('SELECT * FROM %t',array('table_name'));
$result为二维数组
2、fetch_first
DB::fetch_first(sql, $arg = array());//取出符合条件的第一条数据
例:$result = DB::fetch_first('SELECT * FROM %t ', array('table_name'));
$result为一维数组

二、discuz数据操作之增:
DB::insert(参数一,参数二,参数三);
/*
参数一:table_name
参数二:以对应数据表中的字段为key,具体数值为value组成的关联数组
参数三:是否返回该数据的id。true则返回具体id,false则不会返回id
*/
例:DB::insert('table_name',['name'=>'张三','age'=>'18','sex'=>'男'],true);

三、discuz数据操作之改:
DB::update(参数一,参数二,参数三);
/*
参数一:table_name
参数二:以对应数据表中的字段为key,具体数值为value组成的关联数组
参数三:修改的where条件
*/
例:DB::update('table_name',['name'=>'张三','age'=>'19','sex'=>'男'],' id = 1 ');

四、discuz数据操作之删:
DB::delete(参数一,参数二);
/*
参数一:table_name
参数二:删除的where条件
*/
例:$sql = 'id = '.$id;
DB::delete('table_name',$sql);


以上是discuz的基本数据库操作。但实际开发中会对数据操作进行再封装,实际暴露的借口是用C::t()方法来进行数据操作

具体操作在source/class/table文件夹内创建一个文件

文件名为table_表名(注:是去掉表前缀的名字),例如:数据库中表名为pre_forum_post,那么该文件的名字为table_forum_post.php

table_forum_design_list.php
<?php
/**
* [Discuz!] (C)2001-2099 Comsenz Inc.
* This is NOT a freeware, use is subject to license terms
*
* $Id: table_forum_access.php 27777 2012-02-14 07:07:26Z zhengqingpeng $
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}

class table_forum_design_list extends discuz_table
{
public function __construct() {

$this->_table = 'forum_design_list';
$this->_pk = '';

parent::__construct();
}

public function get_all() {
return DB::fetch_all('SELECT * FROM %t WHERE st != 0', array($this->_table));
}
public function insert($data)
{
return DB::insert($this->_table,$data,true);
}
public function delete($id)
{
$sql = 'id = '.$id;
return DB::delete($this->_table,$sql);
}
}
?>
//外部文件调用方式
$result = C::t('forum_design_list')->get_all();
$result = C::t('forum_design_list')->insert($data);
$result = C::t('forum_design_list')->delete(1);

根据上面代码所见,所有的直接操作数据库的操作都会写在表对应的class文件里。

补充一点,如何执行原生sql语句。

DB::query(sql,$arg = array());


跳转到