当前位置:首页 » 操作系统 » thinkphp数据库切换

thinkphp数据库切换

发布时间: 2022-07-03 09:12:40

① thinkphp M数据库无法切换

//切换新数据库
$model=M();
//(sql_type://username:password@address:3306/db_name)
//sql_type:数据库类型mysql或者mysqli
$result=$model->db(1,"sql_type://username:password@address:3306/db_name");
//sql语句
$query_sql=XXXXXX;
//查询数据并返回
$data=$result->db(1)->query($query_sql);

② thinkphp执行sql创建数据库后,被切换到了刚刚创建的数据库,怎么换回原数据库或让其不切换。

你需要
M()->query('use 你要切换回来的库');

这个意思就是执行sql语句

③ thinkphp如何从模型连接的数据库切换回原来配置的数据库连接

翻下TP手册,其实不需要提问的,既然我回答了,就给我积分吧。

对于默认的数据库连接,内部的数据库编号是0,因此为了避免冲突,请不要再次定义数据库编号为0的数据库配置
$this->db(0);

④ thinkphp实现多语言切换时,数据库数据如何也实现多语言

有两种情况,分析如下:
1、需要中英文切换内容较少
假设我们现在正在操作的是文章表,需要根据用户的语言环境输出中文或英文的文章内容。
在文章表中多添加一个字段用于存储英文的内容,发布文章的页面,同时上传中英文内容即可,然后服务端通过thinkphp的多语言标识来决定读取中文内容或者英文内容。也可以在前端模板中进行识别。
2、需要中英文切换内容较多
如果某个数据表的多个字段或者多个数据表都需要做中英文切换,显然在数据表里添加多个字段的方式就不太合适了,那将导致数据表字段太多,不方便管理,可以采用多数据表的方式,将内容完整的分为两份。就是把涉及到中英文切换的数据表多拷贝一份而已,里面的数据是英文的
。管理员后台,可以同时存储中英文内容,也可以分开存储,你自己决定就好,读取时同样使用thinkphp的多语言标识判断用户的语言环境,来决定查询中文表还是英文表。
另外,如果整站都需要中英文切换,也可以做分布式数据库!
一切根据实际需求决定!

⑤ 怎么样配置thinkphp 与本地mysql和sql server同时连接俩个数据库

thinkphp 同时连接两个数据库的配置方法如下:
1、在Db.class.php脚本文件里面的类增加一个魔术方法__get(),写法如下:
public function __get($propertyName)
{ return $this->$propertyName;
}
这个方法是用来访问类中protected $config成员属性用的。有的人可能会说,直接把protected改成public岂不是更好。这样只解决了基类的问题,假如,子类也同样进行了受保护,那要你更改更多的文件,这是我们做IT程序员非常不愿意看到的事情。
2、在Model.class.php中的getTableName()方法更改如下:
$tablepre = $this->db->config['tablepre'];
if(empty($this->trueTableName)) {
$tableName??= empty($tablepre) ? $this->tablePrefix : $tablepre;
if(!empty($this->tableName)) {
$tableName .= $this->tableName;
}
else
{
$tableName .= parse_name($this->name);
}
$this->trueTableName? ? =? ?strtolower($tableName);
}
return (!empty($this->dbName)?$this->dbName.'.':'').$this->
trueTableName;这样就完成了多库自由切换时,导致的表前缀问题。

⑥ thinkphp 3.1 切换数据库问题

$model=M("表名(无前缀)","数据表前缀_","mysql://用户名:密码@localhost:3306/数据库名");
$arr=$model->select();
print_r($arr);

我这样测试了 是可以的 你要检查你的格式是否正确

⑦ thinkphp redis 怎么选择数据库

1、redis 中的每一个数据库,都由一个 redisDb 的结构存储。其中,redisDb.id 存储着 redis 数据库以整数表示的号码。redisDb.dict 存储着该库所有的键值对数据。redisDb.expires 保存着每一个键的过期时间。

2、当redis 服务器初始化时,会预先分配 16 个数据库(该数量可以通过配置文件配置),所有数据库保存到结构 redisServer 的一个成员 redisServer.db 数组中。当我们选择数据库 select number 时,程序直接通过 redisServer.db[number] 来切换数据库。有时候当程序需要知道自己是在哪个数据库时,直接读取 redisDb.id 即可。

3、既然我们知道一个数据库的所有键值都存储在redisDb.dict中,那么我们要知道如果找到key的位置,就有必要了解一下dict 的结构了:

typedef struct dict {

// 特定于类型的处理函数
dictType *type;

// 类型处理函数的私有数据
void *privdata;

// 哈希表(2个)
dictht ht[2];

// 记录 rehash 进度的标志,值为-1 表示 rehash 未进行
int rehashidx;

// 当前正在运作的安全迭代器数量
int iterators;
} dict;
由上述的结构可以看出,redis 的字典使用哈希表作为其底层实现。dict 类型使用的两个指向哈希表的指针,其中 0 号哈希表(ht[0])主要用于存储数据库的所有键值,而1号哈希表主要用于程序对 0 号哈希表进行 rehash 时使用,rehash 一般是在添加新值时会触发,这里不做过多的赘述。所以redis 中查找一个key,其实就是对进行该dict 结构中的 ht[0] 进行查找操作。

4、既然是哈希,那么我们知道就会有哈希碰撞,那么当多个键哈希之后为同一个值怎么办呢?redis采取链表的方式来存储多个哈希碰撞的键。也就是说,当根据key的哈希值找到该列表后,如果列表的长度大于1,那么我们需要遍历该链表来找到我们所查找的key。当然,一般情况下链表长度都为是1,所以时间复杂度可看作o(1)。

二、当redis 拿到一个key 时,如果找到该key的位置。

了解了上述知识之后,我们就可以来分析redis如果在内存找到一个key了。

1、当拿到一个key后, redis 先判断当前库的0号哈希表是否为空,即:if (dict->ht[0].size == 0)。如果为true直接返回NULL。

2、判断该0号哈希表是否需要rehash,因为如果在进行rehash,那么两个表中者有可能存储该key。如果正在进行rehash,将调用一次_dictRehashStep方法,_dictRehashStep 用于对数据库字典、以及哈希键的字典进行被动 rehash,这里不作赘述。

3、计算哈希表,根据当前字典与key进行哈希值的计算。

4、根据哈希值与当前字典计算哈希表的索引值。

5、根据索引值在哈希表中取出链表,遍历该链表找到key的位置。一般情况,该链表长度为1。

6、当 ht[0] 查找完了之后,再进行了次rehash判断,如果未在rehashing,则直接结束,否则对ht[1]重复345步骤。

到此我们就找到了key在内存中的位置了。

⑧ thinkphp 如何手动连接数据库

//数据库配置1
'DB_CONFIG1' = array(
'db_type' => 'mysql',
'db_user' => 'root',
'db_pwd' => '1234',
'db_host' => 'localhost',
'db_port' => '3306',
'db_name' => 'thinkphp'
),
//数据库配置2
'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp';
这样,设置2个数据库。切换方法如下:
$this->db(1,"DB_CONFIG1")->query("查询SQL");
$this->db(2,"DB_CONFIG2")->query("查询SQL");
这样来调用,就可以了。至于里面的参数,你应该了解吧,DB2的配置也可以照第1个那样写,主要注意一下调用形式就可以了。希望帮到你
$this->db(1)->table("top_user")->find();
这个是指定表的查询,M的使用方法:
M("User","think_","DB_CONFIG1")->query("查询SQL");
think_是表前缀,2个库肯定不一样。

⑨ thinkphp对数据库操作有哪些内置函数

8.4.4 Model类
getModelName() 获取当前Model的名称
getTableName() 获取当前Model的数据表名称
switchModel(type,vars=array()) 动态切换模型
table() 设置当前操作的数据表
field() 设置要查询的数据字段
where() 设置查询或者操作条件
data(data) 设置数据对象
order(order) 设置排序
limit(limit) 查询限制
page(page) 查询分页
join(join) 进行JOIN查询
having(having) 进行having查询
group(group) 进行group查询
lock(lock) 查询锁定
distinct(distinct) 唯一性查询
count(field) 记录统计
sum(field) 总数查询
min(field) 最小值查询
max(field) 最大值查询

avg(field) 平均值查询
_initialize() 模型初始化方法
_facade(data) 对保存到数据库的数据进行处理
_before_write(&data) 写入数据前的回调方法 包括新增和更新
add(data='',options=array()) 新增数据
_before_insert(&data,options) 写入数据前的回调方法
_after_insert(data,options) 写入数据后的回调方法
selectAdd(fields='',table='',options=array()) 通过Select方式添加记录
save(data='',options=array()) 更新数据到数据库
_before_update(&data,options) 更新数据前的回调方法
_after_update(data,options) 更新成功后的回调方法
delete(options=array()) 删除数据
_after_delete(data,options) 删除成功后的回调方法
select(options=array()) 查询数据集
_after_select(&resultSet,options) 查询成功后的回调方法
findAll(options=array()) select方法的别名
_options_filter(&options) 表达式过滤回调方法
find(options=array()) 查询数据
_after_find(&result,options) 查询成功的回调方法
setField(field,value,condition='') 设置记录的某个字段值
setInc(field,condition='',step=1) 字段值增长
setDec(field,condition='',step=1) 字段值减少
getField(field,condition='',sepa=' ') 获取某个字段值
create(data='',type='') 创建数据对象

autoCheckToken(data) 表单令牌验证

query(sql) 执行原生SQL查询

execute(sql='') 执行原生SQL操作

startTrans() 启动事务

commit() 提交事务

rollback() 事务回滚

getError() 获取模型的错误信息

getDbError() 获取数据库的错误信息

getLastInsID() 获取最后执行的SQL语句

getPk() 获取主键名称

getDbFields() 获取数据表的字段信息

regex(value,rule) 使用正则验证数据

setProperty(name,value) 设置模型的属性值

2.1版新增方法:

db(linkNum,config='') 切换当前数据库连接

高级模型类AdvModel

topN(count,options=array()) 查询满足条件的前N个记录

getN(position=0,options=array()) 查询符合条件的第N条记录

0 表示第一条记录 -1 表示最后一条记录

first(options=array()) 获取满足条件的第一条记录

last(options=array()) 获取满足条件的最后一条记录

returnResult(data,type='') 返回指定的数据类型

setLazyInc(field,condition='',step=1,lazyTime=0) 字段值延迟增长

setLazyDec(field,condition='',step=1,lazyTime=0) 字段值延迟减少

addConnect(config,linkNum=NULL) 增加数据库连接

delConnect(linkNum) 删除数据库连接

closeConnect(linkNum) 关闭数据库连接

switchConnect(linkNum,name='') 切换数据库连接

patchQuery(sql=array()) 批处理执行SQL语句

getPartitionTableName(data=array()) 得到分表的的数据表名

热点内容
我的世界花雨亭服务器被炸 发布:2024-11-17 18:55:39 浏览:108
安卓游戏删了怎么找回 发布:2024-11-17 18:54:02 浏览:812
安卓系统键盘分离如何合成 发布:2024-11-17 18:40:23 浏览:598
抖音压缩文件 发布:2024-11-17 18:33:50 浏览:584
儿创想编程 发布:2024-11-17 18:33:38 浏览:418
苹果怎么打开压缩文件 发布:2024-11-17 18:13:42 浏览:206
海南联通宽带密码是什么 发布:2024-11-17 17:58:56 浏览:627
android签名工具 发布:2024-11-17 17:43:05 浏览:575
酒店酒管软件服务器ip段 发布:2024-11-17 17:34:10 浏览:917
关系数据库关键字 发布:2024-11-17 17:20:12 浏览:308