数据库教程

相关类和配置。

相关选项

‘before_get_db_handler’=>null, // 在调用 DB 前调用 ‘use_context_db_setting’=>true, //使用 setting 里的 database_list 配置。 ‘database_list’=>[], //DB 列表

相关设置

setting.php 以下配置,注意的是 DuckPhp 默认是支持多个数据库的,所以是database_list

  1. [
  2. 'database_list' =>[[
  3. 'dsn'=>'mysql:host=???;port=???;dbname=???;charset=utf8;',
  4. 'username'=>'???',
  5. 'password'=>'???',
  6. ]],
  7. ],

开始

DBManager

默认开启。DBManager 类是用来使用数据库的 M::DB() 用到了这个组件。

方法

DB() 是 App::DB 和 M::DB 的实现。

DB 类的用法

DB close(); //关闭, 你一般不用关闭,系统会自动关闭 PDO(); quote($string); fetchAll($sql, …$args); fetch($sql, …$args); fetchColumn($sql, …$args); execute($sql, …$args); // 执行某条sql

例子 full/dbtest.php 演示了这些增删改查怎么用。

示例

使用数据库,在 设置里正确设置 database_list 这个数组,包含多个数据库配置 然后在用到的地方调用 App::DB($tag=null) 得到的就是 DB 对象,用来做各种数据库操作。 $tag 对应 $setting[‘database_list’][$tag]。默认会得到最前面的 tag 的配置。

你不必担心每次框架初始化会连接数据库。只有第一次调用 DuckPhp::DB() 的时候,才进行数据库类的创建。

DB 的使用方法,看后面的参考。 示例如下

  1. <?php
  2. use DuckPhp\DuckPhp;
  3. use DuckPhp\Helper\ModelHelper as M;
  4. require_once('../vendor/autoload.php');
  5. $options=[];
  6. $options['override_class']=''; // 示例文件不要被子类干扰。
  7. $options['skip_setting_file']=true; // 不需要配置文件。
  8. $options['database_list']=[[
  9. 'dsn'=>'mysql:host=127.0.0.1;port=3306;dbname=DnSample;charset=utf8;',
  10. 'username'=>'root',
  11. 'password'=>'123456',
  12. ]]; // 这里用选项里的
  13. DuckPhp::RunQuickly($options,function(){
  14. $sql="select 1+? as t";
  15. $data=M::DB()->fetch($sql,2);
  16. var_dump($data);
  17. DuckPhp::exit_system(0);
  18. });

数据库

DuckPhp 提供了一个默认的数据库类。如果在项目中有不满意,则可以替换之。

建议只在 Model 层用 数据库。

示例如下

  1. <?php
  2. // app/Model/MiscModel.php
  3. namespace MY\Model;
  4. use MY\Base\BaseModel;
  5. use MY\Base\Helper\ModelHelper as M;
  6. class DBModel extends BaseModel
  7. {
  8. public function first()
  9. {
  10. $sql="select 1+? as t";
  11. $data=M::DB()->fetch($sql,2);
  12. var_dump($data);
  13. }
  14. }

要使用数据库,需要在 config/setting.php 里做相关配置添加.

  1. 'database_list' =>
  2. [[
  3. 'dsn'=>'mysql:host=???;port=???;dbname=???;charset=utf8;',
  4. 'username'=>'???',
  5. 'password'=>'???',
  6. ]],

注意到配置是 database_list ,是支持多个数据库的。 1.2.6 版本变更,你可以直接使用 database 配置。

M::DB($tag) 的 $tag 对应 $setting[‘database_list’][$tag]。默认会得到最前面的 tag 的配置。

DbForWrite() 则的对应第0 号数库 ,DbForRead() 对应第 1号数据库。

你不必担心每次框架初始化会连接数据库。只有第一次调用 DuckPhp::DB() 的时候,才进行数据库类的创建。

使用 think-orm 的 DB

  1. <?php
  2. use think\facade\Db;
  3. use DuckPhp\Ext\DBManager;
  4. use DuckPhp\DuckPhp;
  5. require_once('../vendor/autoload.php');
  6. $options=[];
  7. $options['override_class']=App::class;
  8. $options['skip_setting_file']=true;// 不需要配置文件。
  9. class App extends DuckPhp
  10. {
  11. public function _Db($tag)
  12. {
  13. return Db::class;
  14. }
  15. }
  16. DuckPhp::RunQuickly($options,function(){
  17. Db::setConfig([
  18. 'default' => 'mysql',
  19. 'connections' => [
  20. 'mysql' => [
  21. 'type' => 'mysql',
  22. 'hostname' => '127.0.0.1',
  23. 'username' => 'root',
  24. 'password' => '123456',
  25. 'database' => 'DnSample',
  26. ]
  27. ]
  28. ]);
  29. });