2012-06-15 37 views
12

我想在我的CodeIgniter應用程序中使用PDO MySQL驅動。這是我的數據庫配置:CodeIgniter PDO數據庫驅動不起作用

$active_group = 'default'; 
$active_record = TRUE; 

$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = 'root'; 
$db['default']['password'] = ''; 
$db['default']['database'] = 'testdatabase'; 
$db['default']['dbdriver'] = 'pdo'; 
$db['default']['dbprefix'] = ''; 
$db['default']['pconnect'] = TRUE; 
$db['default']['db_debug'] = TRUE; 
$db['default']['cache_on'] = FALSE; 
$db['default']['cachedir'] = ''; 
$db['default']['char_set'] = 'utf8'; 
$db['default']['dbcollat'] = 'utf8_general_ci'; 
$db['default']['swap_pre'] = ''; 
$db['default']['autoinit'] = TRUE; 
$db['default']['stricton'] = FALSE; 

然而,當我打開一個控制器,我得到這個錯誤:

Fatal error: Uncaught exception 'PDOException' with message 'invalid data source name' in C:\xampp\htdocs\testsite\system\database\drivers\pdo\pdo_driver.php:114

我檢查使用die($this->hostname);數據源pdo_driver.php和它的現身爲:

localhost;dbname=testdatabase 

所以它得到正確的數據庫名稱。數據庫存在,我確實有MySQL運行。

這裏可能會出現什麼問題?謝謝。

+1

旁註:我最近看了新版本(2.1.1)changelog以及有關於PDO驅動的一些錯誤修正。您可能想要檢查它 –

+0

Martin,我收到了一個類似的錯誤:致命錯誤:未找到異常'PDOException'帶消息'找不到驅動程序'...((列出了幾個數據庫和核心目錄/文件))。 .. 114線上的syetem/database/drivers/pdo/pdo_driver.php 我已經夠新了,我甚至不知道你的黑客能否幫助我。你在'.../system/database/drivers/pdo/pdo_driver.php'中編輯了哪些內容和內容?我在配置主題上很新手。我覺得需要對系統文件進行攻擊才能使CI v.2.1.1中的PDO工作,這似乎很奇怪,不是嗎?爲什麼(大多數人)不需要你提到的黑客? – govinda

+0

@govinda,我在第81行,在類構造函數的'else {...}'後面執行了操作。這似乎很奇怪,你需要破解它,但我發現沒有錯誤,因爲我的修復。 –

回答

8

這不應該是這種情況。

localhost;dbname=testdatabase 

應該

mysql:dbname=testdatabase;host=localhost; 
+1

謝謝,我修改了CodeIgniter PDO驅動程序到這個:'$ this-> hostname ='mysql:dbname ='。$ this-> database。'; host ='。$ this-> hostname;'它似乎工作現在。 :) –

+3

修改核心驅動程序是不必要的,並且會在下次更新配置項時中斷,除非您記得再次對核心文件進行更改。採取下面的方法,改爲編輯您的數據庫設置文件。 – PaulSkinner

30

在文件/application/config/database.php哪裏是

$db['default']['hostname'] = 'localhost'; 

必須

$db['default']['hostname'] = 'mysql:host=localhost'; 

localhost或您的數據庫主機。

+2

+1 - 在任何地方都找不到,你搖滾! – Chris

+1

Doh。當然應該。我只是推測CI會處理掉它。 – PaulSkinner

1

根據CodeIgniter的Database Configuration頁面,

對於PDO驅動程序,你應該改變 'hostname => 'localhost'' 到 「'hostname' => mysql:host=localhost」 象下面這樣:

$db['default'] = array(
    'dsn' => '', 
    'hostname' => 'mysql:host=localhost', 
    'username' => 'root', 
    'password' => '', 
    'database' => 'database_name', 
    'dbdriver' => 'pdo', 
    'dbprefix' => '', 
    'pconnect' => FALSE, 
    'db_debug' => (ENVIRONMENT !== 'production'), 
    ..... 
    ..... 
); 
6

PDO驅動程序需要一個完整的DSN要提供的字符串。 這樣

'dsn' = ‘mysql:host=localhost;dbname=databasename’; 

字符串當你使用這個字符串,你應該刪除主機和從陣列數據庫名稱值。 我想下面的例子給你一個想法。

$db['default'] = array(
'dsn' => 'mysql:host=localhost;dbname=codeigniter3', 
'hostname' => '', 
'username' => 'root', 
'password' => '', 
'database' => '', 
'dbdriver' => 'pdo', 
'dbprefix' => '', 
'pconnect' => FALSE, 
'db_debug' => TRUE, 
'cache_on' => FALSE, 
'cachedir' => '', 
'char_set' => 'utf8', 
'dbcollat' => 'utf8_general_ci', 
'swap_pre' => '', 
'encrypt' => FALSE, 
'compress' => FALSE, 
'stricton' => FALSE, 
'failover' => array(), 
'save_queries' => TRUE 
); 

感謝