thinkphp多個資料庫
M的是數據表不是資料庫 如果多表聯查的話 請看文檔 有詳細介紹
『貳』 如何解決ThinkPHP實現多資料庫連接的方法
ThinkPHP實現連接多個數據的時候,如果資料庫在同一個伺服器里的話只需要這樣定義模型:
class MembersModel extends Model{ protected $trueTableName = 'members.members'; //資料庫名.表名(包含了前綴) }
然後就可以像D("Members");這樣實例化模型,像普通模型那樣操作了。
但後來發現他的資料庫在兩個不同的伺服器,這樣上面的方法就不行了。
這時候就需要使用TP的多數據連接特性了。
『叄』 thinkphp只支持一個資料庫的讀寫分離我這里配置有多個資料庫,如何配置
每個模型都可以 單獨配置資料庫,具體可以查詢手冊嘛 很詳細的
『肆』 thinkphp如何連接多個資料庫
1、onfig.php文件
'LOAD_EXT_CONFIG'
=>'db,db_config',
//
載入擴展
配置文件
。多個文件用逗號分隔
//其中db.php中放置的是mysql的配置
//db_config放置的是
sqlserver
的配置
2、其中db.php內容如下
return
array(
'DB_TYPE'=>'mysql',
'DB_HOST'=>'
localhost
',
'DB_NAME'=>'your_mysql_dbname',
'DB_USER'=>'your_mysql_user_name',
'DB_PWD'=>'123456',
'DB_PORT'=>'3306',
'DB_PREFIX'=>'',
);
db_config.php內容如下
return
array(
'DB_CONFIG1'
=>
array(
'db_type'
=>
'pdo',
'db_user'
=>
'XX',
'db_pwd'
=>
'XXXXXXXX',
'DB_DSN'
=>
'sqlsrv:Server=XXXXXX;Database=XXXX',
),
);
3、在Lib/Model下新建一個專門的模型
class
SqlsrvModel
extends
Model
{
protected
$
connection
=
'DB_CONFIG1';
}
4、可以在Action
中調
各個模型了
『伍』 怎麼樣配置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;這樣就完成了多庫自由切換時,導致的表前綴問題。
『陸』 Think3.2.3怎麼配置多個資料庫連接
Think3.2.3配置多個資料庫連接方法:
一、全局配置定義
常用的配置方式是在應用配置文件或者模塊配置文件中添加下面的配置參數:
//資料庫配置信息
'DB_TYPE' => 'mysql', // 資料庫類型
'DB_HOST' => 'localhost', // 伺服器地址
'DB_NAME' => 'thinkphp', // 資料庫名
'DB_USER' => 'root', // 用戶名
'DB_PWD' => '123456', // 密碼
'DB_PORT' => 3306, // 埠
'DB_PREFIX' => 'think_', // 資料庫表前綴
'DB_CHARSET'=> 'utf8', // 字元集
資料庫的類型由DB_TYPE參數設置。
下面是目前支持的資料庫設置:
DB_TYPE設置 支持的資料庫類型
mysql或mysqli mysql
pgsql pgsql
sqlite sqlite
mssql 或sqlsrv sqlserver
oracle oracle
ibase ibase
mongo mongo
PDO PDO支持的所有資料庫
如果DB_TYPE使用PDO類型的話,資料庫類型則由DB_DSN配置決定。
或者採用如下配置
'DB_DSN' => 'mysql://root:123456@localhost:3306/thinkphp#utf8'
使用DB_DSN方式定義可以簡化配置參數,DSN參數格式為:
資料庫類型://用戶名:密碼@資料庫地址:資料庫埠/資料庫名#字元集
字元集設置需要3.2.1版本以上有效,字元集如果沒有設置的話,默認為utf8。
如果兩種配置參數同時存在的話,DB_DSN配置參數優先。
注意:如果要設置分布式資料庫,暫時不支持DB_DSN方式配置。
如果採用PDO驅動的話,則必須首先配置DB_TYPE為pdo,然後還需要單獨配置其他參數,例如:
//PDO連接方式
'DB_TYPE' => 'pdo', // 資料庫類型
'DB_USER' => 'root', // 用戶名
'DB_PWD' => '', // 密碼
'DB_PREFIX' => 'think_', // 資料庫表前綴
'DB_DSN' => 'mysql:host=localhost;dbname=thinkphp;charset=utf8'
注意:PDO方式的DB_DSN配置格式有所區別,根據不同的資料庫類型設置有所不同,具體可以參考PHP手冊。
配置文件定義的資料庫連接信息一般是系統默認採用的,因為一般一個應用的資料庫訪問配置是相同的。該方法系統在連接資料庫的時候會自動獲取,無需手動連接。
可以對每個模塊定義不同的資料庫連接信息,如果開啟了調試模式的話,還可以在不同的應用狀態的配置文件裡面定義獨立的資料庫配置信息。
二、模型類定義
如果在某個模型類裡面定義了connection屬性的話,則實例化該自定義模型的時候會採用定義的資料庫連接信息,而不是配置文件中設置的默認連接信息,通常用於某些數據表位於當前資料庫連接之外的其它資料庫,例如:
//在模型里單獨設置資料庫連接信息
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
protected $connection = array(
'db_type' => 'mysql',
'db_user' => 'root',
'db_pwd' => '1234',
'db_host' => 'localhost',
'db_port' => '3306',
'db_name' => 'thinkphp',
'db_charset' => 'utf8',
);
}
也可以採用DSN方式定義,例如:
//在模型里單獨設置資料庫連接信息
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
//或者使用DSN定義
protected $connection = 'mysql://root:1234@localhost:3306/thinkphp#utf8';
}
如果我們已經在配置文件中配置了額外的資料庫連接信息,例如:
//資料庫配置1
'DB_CONFIG1' => array(
'db_type' => 'mysql',
'db_user' => 'root',
'db_pwd' => '1234',
'db_host' => 'localhost',
'db_port' => '3306',
'db_name' => 'thinkphp',
'db_charset'=> 'utf8',
),
//資料庫配置2
'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp#utf8';
那麼,我們可以把模型類的屬性定義改為:
//在模型里單獨設置資料庫連接信息
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
//調用配置文件中的資料庫配置1
protected $connection = 'DB_CONFIG1';
}
//在模型里單獨設置資料庫連接信息
namespace Home\Model;
use Think\Model;
class InfoModel extends Model{
//調用配置文件中的資料庫配置1
protected $connection = 'DB_CONFIG2';
}
三、實例化定義
除了在模型定義的時候指定資料庫連接信息外,我們還可以在實例化的時候指定資料庫連接信息,例如: 如果採用的是M方法實例化模型的話,也可以支持傳入不同的資料庫連接信息,例如:
$User = M('User','other_','mysql://root:1234@localhost/demo#utf8');
表示實例化User模型,連接的是demo資料庫的other_user表,採用的連接信息是第三個參數配置的。如果我們在項目配置文件中已經配置了DB_CONFIG2的話,也可以採用:
$User = M('User','other_','DB_CONFIG2');
需要注意的是,ThinkPHP的資料庫連接的惰性的,所以並不是在實例化的時候就連接資料庫,而是在有實際的數據操作的時候才會去連接資料庫(額外的情況是,在系統第一次實例化模型的時候,會自動連接資料庫獲取相關模型類對應的數據表的欄位信息)。
『柒』 thinkphp 可不可以同時對兩個資料庫添加數據
您好,所謂共用配置文件也就是說前後台使用同一個文件,因此我們只需要把前後台各自的配置文件提取出來,放置到和項目目錄同級的目錄下即可,然後在前後台各自的配置文件調用這個提取出來的文件。1、建立共用的配置文件,Conf/config.php。2、公用的配置已建立,接下來在前後台各自的配置文件中引用前台(Index目錄)配置文件。後台(Admin目錄)配置文件同上。3、測試:在前後台Index模塊index方法里我們調用不同的數據表,可以顯示不同的數據。
『捌』 thinkphp5 怎麼同時連接mysql和sqlserver 2種資料庫
到微軟官網下載文件,網址:網路搜索選擇「SQLSRV20.EXE」,點擊"next"(下一步),進行下載右鍵解壓到當前目錄,把這兩個文件拷貝到PHP目錄下的ext目錄下下圖是拷貝後的結果,請參考,不要拷錯了。打開php-ini在文件中設置,加上下面兩行代碼,如下圖下面這里設置為On,保存,重啟服務,如下圖修改thinkphp配置文件,如下圖thinkphp控制器文件,隨便查個sqlserver表中的數據,看是否能成功列印,如果成功列印,那麼證明資料庫連接成功。如果不能正確列印,那麼看報錯提示,在按照提示解決問題。
『玖』 怎麼讓thinkphp多個資料庫執行事務操作
1、安裝mysql追蹤器2、MySQL預處理語句prepare、execute3、了解MySQL事務4、安裝sqlyong工具1、資料庫配置2、query execute原生sql語句 增刪改查原生:Db::execute('insert into think_data(name) values("ddd")');增刪改都可以用execute,查用query原生:DB::query('select *from demo where id<5');3、參數綁定 命名佔位符綁定參數的綁定:$result3 = Db::execute('select *from demo where id=?',