thinkphp笔记(2)

本文介绍ThinkPHP框架中数据库的手动连接方法及主从数据库配置,并详细讲解了四种模型实例化的方式,包括基础模型、跨模型、自定义模型及空模型的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*手动连接数据库
方式1
//$dsn = 'mysql://username:password@localhost:3306/DBNAME';
$dsn = 'mysql://google:google@www.google.com:3306/google';
$db = new Db($dsn);
方式2
$dsn = array(
'dbms'=>'mysq',
'username'=>'google',
'password'=>'google',
'hostname'=>'8.8.8.8',
'hostport'=>'3309',
'database'=>'googledns',
);
$db = new Db($dsn);
方式3 必须在模型里写
class UserModel extends Model{
protected $connection = array(
'dbms' => 'mysql',
'username' => 'username',
'password' => 'aaa',
'hostname' => '9.9.9.9',
'hostport' => '888',
'database' => 'aaa',
);

protected $connection = 'mysql://username:password@localhost:3306/dbname';
}

主从数据库
适合高并发,高负载

'DB_DEPLOY_TYPE'=>1,
//必须要在数据库服务器当中进行相应的配置
//数据信息同步
//他会在写入的过程当中,自动去找一台服务器,读取的时候,也会在这当中自动去找一台数据库服务器
'DB_HOST'=>'localhost,192.158.1.2,192.168.1.9',
'DB_NAME'=>'videodemo,videodemo1,videodemo2',如果数据库名都相同的话,可以不用定义多个
'DB_USER'=>'root',
'DB_PWD'=>'',
'DB_PORT'=>'3306',
'DB_PREFIX'=>'think_',
'DB_RW_SEPARATE'=>true,//读写分离,默认第一台数据库是写服务器,后面的都是读服务器
//读写分离
//写的数据比较少(写的数据,也仅仅是管理员来进行操作),而读的数据是海量的。(读写分离)


//读取配置文件当中的参数
$a = C('DB_HOST');
$b = C('URL_MODEL');

*实例化模型
thinkphp提供了4种实例化模型的方法
1,创建一个基础模型
2,实例化一个系统自带的数据库操作类

1.
new Model,在Model当中传上一个我们需要操作的表即可

$User = new Model('User');
数据表名:UserMessage等价于thinkphp_user_message
 User等价于thinkphp_user
 
便捷操作(快捷操作)
$User = M('User');

2.跨模型方式
$User = M('User','CommonModel');//表名,模型名称
$User = new CommonModel('User');
以上两种方式效果相同

3.实例化一个用户定义的模型
需要手动创建一个模型
$user = new UserModel();等价于$user = D('user');
实例化一个自定义模型的时候,一般情况下你的表名和你的类名(模型名)相同
所以不用再额外的传表名
上面方法已经将表名和相关字段找到了
$list = $user->select();
dump($list);
D方法可以自动检测模型类,不存在时,它会抛出一个异常。同时对于已实例化过的模型,不会去重复实例化。默认的D方法只能支持调用当前项目(应用)下面的模型
//如果说,我这是前台应用(项目),但是,我想实例化后台项目当中的模型怎么办?
    //user类,(模型)        
    $user=D('admin','user');        
    //D('admin.user');分组的方式


//实例模型的第二种方法和第三种法(实例化自定义模型)有何不同。
    //在你的业务逻辑当中,通常情况下有一些公共的业务逻辑。  那你用第二种M('user','CommonModel')
    //公共的业务逻辑,难道你每次都去自定义一个模型吗? 太复杂。。。。
    //并且,你的这样一个实例化的模型当中,只需要使用thinkphp model类为我们提供的一些方法即可。没有更加复杂的业务逻辑了,但是只有一些共公的业务逻辑
    //第三种情况,这种情况适用于针对所操作表的更加复杂的业务逻辑,但是它不需要使用到公共业务逻辑。(它的业务逻辑,针对用户表,他是唯一的。并且,不需要在其他模型当中使用),在这种情况下面,我们就使用自定义模型
      
4.实例化一个空模型,它并不知道你要实例化操作的是哪一张表
$user = new Model();等价于$user = M();
//传统使用sql语句的方式,
$list = $user->query('select * from think_user');
dump($list);


*
protected $tableName = 'UserMessageInfo';//或think_user_message_info
protected $trueTableName = 'cms_user';//若表前缀不是DB_PREFIX的值,可这样写表名

磁盘当中自动创建一个文件,来写入我们的表字段信息
一般情况,多服务器,我们一般不向本地文件系统当中写入数据
ftp 专门放到镜像服务器上面
一方面,为了以防出现这样一种文体
其二,为了节约系统的I/O开销
这些情况下面,我们可以将对应的字段信息直接写入到我们的Model里面来。这样的话,就能够提高效率的同时,节省I/O开销,实现更加智能的用户信息传递时判断字段

protected $dbName = 'user';//跨库

protected $fields = array(
0=>'id',
1=>'username',
2=>'password',
'_pk'=>'id',
'_autoinc'=>true,
);

$对象->getPk();//获取主键信息
$user->getDbFields();// 获取字段信息


模板文件中
{__NOTOKEN__}//加上后查看源码不显示token的隐藏表单
{__TOKEN__}//如果有多个表单,加这个可以确定只有一个token,并且可以修改token的位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值