加盟网网站建设策划书,做服饰的有哪些网站,公司网站建设 意义,网站建设目的内容输出ThinkPHP内置了抽象数据库访问层#xff0c;把不同的数据库操作封装起来#xff0c;我们只需要使用公共的Db类进行操作#xff0c;而无需针对不同的数据库写不同的代码和底层实现#xff0c;Db类会自动调用相应的数据库驱动来处理。采用PDO方式#xff0c;目前包含了Mysql…ThinkPHP内置了抽象数据库访问层把不同的数据库操作封装起来我们只需要使用公共的Db类进行操作而无需针对不同的数据库写不同的代码和底层实现Db类会自动调用相应的数据库驱动来处理。采用PDO方式目前包含了Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。 如果应用需要使用数据库必须配置数据库连接信息数据库的配置文件有多种定义方式。
一、配置文件定义
常用的配置方式是在应用目录或者模块目录下面的database.php中添加下面的配置参数
return [// 数据库类型type mysql,// 数据库连接DSN配置dsn ,// 服务器地址hostname 127.0.0.1,// 数据库名database thinkphp,// 数据库用户名username root,// 数据库密码password ,// 数据库连接端口hostport ,// 数据库连接参数params [],// 数据库编码默认采用utf8charset utf8,// 数据库表前缀prefix think_,// 数据库调试模式debug false,// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)deploy 0,// 数据库读写是否分离 主从式有效rw_separate false,// 读写分离后 主服务器数量master_num 1,// 指定从服务器序号slave_no ,// 是否严格检查字段是否存在fields_strict true,
];type参数支持命名空间完整定义不带命名空间定义的话默认采用\think\db\connector作为命名空间如果使用应用自己扩展的数据库驱动可以配置为
// 数据库类型
type \org\db\Mysql,表示数据库的连接器采用 \org\db\Mysql类作为数据库连接驱动而不是默认的\think\db\connector\Mysql。
每个模块可以设置独立的数据库连接参数并且相同的配置参数可以无需重复设置例如我们可以在admin模块的database.php配置文件中定义
return [// 服务器地址hostname 192.168.1.100,// 数据库名database admin,
];表示admin模块的数据库地址改成 192.168.1.100数据库名改成admin其它的连接参数和应用的database.php中的配置一样。
V5.0.6版本开始支持Mysql的断线重连机制默认关闭需要的话是数据库配置文件中添加
// 开启断线重连
break_reconnect true,连接参数
可以针对不同的连接需要添加数据库的连接参数具体的连接参数可以参考PHP手册内置采用的参数包括如下
PDO::ATTR_CASE PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES false,
PDO::ATTR_EMULATE_PREPARES false,在database中设置的params参数中的连接配置将会和内置的设置参数合并如果需要使用长连接并且返回数据库的小写列名可以采用下面的方式定义
params [\PDO::ATTR_PERSISTENT true,\PDO::ATTR_CASE \PDO::CASE_LOWER,
],你可以在params里面配置任何PDO支持的连接参数。
二、方法配置
我们可以在调用Db类的时候动态定义连接信息例如
Db::connect([// 数据库类型type mysql,// 数据库连接DSN配置dsn ,// 服务器地址hostname 127.0.0.1,// 数据库名database thinkphp,// 数据库用户名username root,// 数据库密码password ,// 数据库连接端口hostport ,// 数据库连接参数params [],// 数据库编码默认采用utf8charset utf8,// 数据库表前缀prefix think_,
]);或者使用字符串方式
Db::connect(mysql://root:1234127.0.0.1:3306/thinkphp#utf8);字符串连接的定义格式为 数据库类型://用户名:密码数据库地址:数据库端口/数据库名#字符集 注意字符串方式可能无法定义某些参数例如前缀和连接参数。
如果我们已经在应用配置文件注意这里不是数据库配置文件中配置了额外的数据库连接信息例如
//数据库配置1
db_config1 [// 数据库类型type mysql,// 服务器地址hostname 127.0.0.1,// 数据库名database thinkphp,// 数据库用户名username root,// 数据库密码password ,// 数据库编码默认采用utf8charset utf8,// 数据库表前缀prefix think_,
],
//数据库配置2
db_config2 mysql://root:1234localhost:3306/thinkphp#utf8;我们可以改成
Db::connect(db_config1);
Db::connect(db_config2);三、模型类定义
如果在某个模型类里面定义了connection属性的话则该模型操作的时候会自动连接给定的数据库连接而不是配置文件中设置的默认连接信息通常用于某些数据表位于当前数据库连接之外的其它数据库例如
//在模型里单独设置数据库连接信息
namespace app\index\model;use think\Model;class User extends Model
{protected $connection [// 数据库类型type mysql,// 数据库连接DSN配置dsn ,// 服务器地址hostname 127.0.0.1,// 数据库名database thinkphp,// 数据库用户名username root,// 数据库密码password ,// 数据库连接端口hostport ,// 数据库连接参数params [],// 数据库编码默认采用utf8charset utf8,// 数据库表前缀prefix think_,];
}也可以采用DSN字符串方式定义例如
//在模型里单独设置数据库连接信息
namespace app\index\model;use think\Model;class User extends Model
{//或者使用字符串定义protected $connection mysql://root:1234127.0.0.1:3306/thinkphp#utf8;
}并且支持直接使用数据库连接的配置名称例如
//在模型里单独设置数据库连接信息
namespace app\index\model;use think\Model;class User extends Model
{// 直接使用配置参数名protected $connection db_config1;
}需要注意的是ThinkPHP的数据库连接是惰性的所以并不是在实例化的时候就连接数据库而是在有实际的数据操作的时候才会去连接数据库。