問(wèn)題一:could not find driver
$this->resultSetType = $config['resultset_type']; }
try {
if (empty($config['dsn'])) {
$config['dsn'] = $this->parseDsn($config);
}
if ($config['debug']) {
$startTime = microtime(true);
}
$this->links[$linkNum] = new PDO($config['dsn'], $config['username'], $config['password'], $params);
if ($config['debug']) {
// 記錄數(shù)據(jù)庫(kù)連接信息
Log::record('[ DB ] CONNECT:[ UseTime:' . number_format(microtime(true) - $startTime, 6) . 's ] ' .$config['dsn'], 'sql'); }
} catch (\PDOException $e) {
if ($autoConnection) {
Log::record($e->getMessage(), 'error'); return $this->connect($autoConnection, $linkNum);
} else {
報(bào)錯(cuò)發(fā)生在$this->links[$linkNum] = new PDO($config['dsn'], $config['username'], $config['password'], $params)這一行套耕,報(bào)錯(cuò)的主信息是could not find driver贞间,字面上的意思就是沒(méi)有找到驅(qū)動(dòng)恋博,后來(lái)查找了一下原因發(fā)現(xiàn)是php配置文件沒(méi)開(kāi)支持宾添,照著網(wǎng)上的解決辦法改了還是沒(méi)能解決锭弊,最后看了stackoverflow找到了答案堪澎,原來(lái)是php的ext目錄的路徑寫(xiě)的不對(duì),要寫(xiě)完整的路徑味滞。如下:
extension_dir = "D:\PhpDev\php-5.6.27\ext"http://關(guān)鍵是這里的路徑要寫(xiě)絕對(duì)路徑 ,也許和我自己配的環(huán)境有關(guān)
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
這樣改完之后是能連上數(shù)據(jù)庫(kù)了樱蛤,可是一開(kāi)始連不上的時(shí)候瞎搞亂開(kāi)配置,導(dǎo)致了以下的問(wèn)題剑鞍。
問(wèn)題二:SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected
剛開(kāi)始看官方的文檔進(jìn)行配置的時(shí)候嘛昨凡,大部分看懂了,但是有個(gè)沒(méi)看懂蚁署,'dsn' => '',以前配置的時(shí)候沒(méi)有配置過(guò)這個(gè)屬性便脊,上網(wǎng)收了一下,官方給的是mysql:光戈,所以配置改成了'dsn' => 'mysql:'哪痰,以為可以連上數(shù)據(jù)庫(kù),開(kāi)始還是沒(méi)能連上久妆,最終通過(guò)上面問(wèn)題的方式解決了連接問(wèn)題晌杰,但是因?yàn)榍懊娓牧诉@個(gè)配置沒(méi)改回去就出現(xiàn)了問(wèn)題二,看字面的意思是沒(méi)有選擇數(shù)據(jù)庫(kù)筷弦,就跟命令行里沒(méi)有執(zhí)行use database的時(shí)候的報(bào)錯(cuò)肋演,可是剛接觸框架哪里的懂得,后來(lái)通過(guò)查找發(fā)現(xiàn)了一個(gè)折中的辦法烂琴,就是查詢(xún)的時(shí)候手動(dòng)加上數(shù)據(jù)庫(kù)名字:
$data = Db::table('thinkphp.think_user')->select();//手動(dòng)加上數(shù)據(jù)庫(kù)名
echo dump($data);
return $this->display();
這樣雖然數(shù)據(jù)是查詢(xún)出來(lái)了爹殊,但是想想不應(yīng)該呀,官方?jīng)]理由會(huì)搞的這么繁瑣的奸绷,一定是哪里的配置出現(xiàn)問(wèn)題了梗夸,后面實(shí)在沒(méi)辦法了,恢復(fù)配置一個(gè)個(gè)慢慢排除健盒。最終才發(fā)原來(lái)是'dsn' => 'mysql:'這個(gè)配置的問(wèn)題绒瘦,現(xiàn)在給出正確的配置:
<?php// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st
// +----------------------------------------------------------------------
return [
// 數(shù)據(jù)庫(kù)類(lèi)型
'type' => 'mysql',
// 服務(wù)器地址
'hostname' => '127.0.0.1',
// 數(shù)據(jù)庫(kù)名
'database' => 'thinkphp',
// 用戶(hù)名
'username' => 'root',
// 密碼
'password' => '**********',
// 端口
'hostport' => '3306',
// 連接dsn称簿,雖然不懂怎么配置才好,但是留空就好
'dsn' => '',
// 數(shù)據(jù)庫(kù)連接參數(shù)
'params' => [],
// 數(shù)據(jù)庫(kù)編碼默認(rèn)采用utf8
'charset' => 'utf8',
// 數(shù)據(jù)庫(kù)表前綴
'prefix' => 'think_',
// 數(shù)據(jù)庫(kù)調(diào)試模式
'debug' => true,
// 數(shù)據(jù)庫(kù)部署方式:0 集中式(單一服務(wù)器),1 分布式(主從服務(wù)器)
'deploy' => 0,
// 數(shù)據(jù)庫(kù)讀寫(xiě)是否分離 主從式有效
'rw_separate' => false,
// 讀寫(xiě)分離后 主服務(wù)器數(shù)量
'master_num' => 1,
// 指定從服務(wù)器序號(hào)
'slave_no' => '',
// 是否嚴(yán)格檢查字段是否存在
'fields_strict' => true,
// 數(shù)據(jù)集返回類(lèi)型 array 數(shù)組 collection Collection對(duì)象
'resultset_type' => 'array',
// 是否自動(dòng)寫(xiě)入時(shí)間戳字段
'auto_timestamp' => false,
// 是否需要進(jìn)行SQL性能分析
'sql_explain' => false,];
關(guān)于DSN 的一些資料惰帽,看的懂憨降,但是不知道怎么配置,應(yīng)用場(chǎng)景在哪里该酗。
資料:
[數(shù)據(jù)庫(kù)] DSN是什么/是什么意思--解釋