【发布时间】:2012-06-20 01:09:08
【问题描述】:
我正在尝试在我的应用程序的本地 (Mac OS 10.7) 副本中(开始)在 Code Igniter 2.1.1 中运行新的 PDO 驱动程序。 我最初使用 Active Record 对所有数据库操作进行编码,现在我想我想在我的模型文件中使用 PDO 准备语句,继续前进。
我像这样修改了“application/config/database.php”: (注意几个小的嵌入式问题)
[snip]
$active_group = 'local_dev';
$active_record = TRUE;//<---BTW, will this need to stay TRUE to make CI sessions work? For better security, don't we want db-based CI sessions to use PDO too?
//http://codeigniter.com/user_guide/database/configuration.html:
//Note: that some CodeIgniter classes such as Sessions require Active Records be enabled to access certain functionality.
//this is the config setting that I am guessing (?) is my main problem:
$db['local_dev']['hostname'] = 'localhost:/tmp/mysql.sock';
// 1.) if $db['local_dev']['dbdriver']='mysql', then here ^^^ 'localhost:/tmp/mysql.sock' works, 2.) but if $db['local_dev']['dbdriver']='pdo', then it fails with error msg. shown below.
$db['local_dev']['username'] = 'root';
$db['local_dev']['password'] = '';
$db['local_dev']['database'] = 'mydbname';
$db['local_dev']['dbdriver'] = 'pdo';
$db['local_dev']['dbprefix'] = '';
$db['local_dev']['pconnect'] = TRUE;
$db['local_dev']['db_debug'] = TRUE;//TRUE
$db['local_dev']['cache_on'] = FALSE;
$db['local_dev']['cachedir'] = '';
$db['local_dev']['char_set'] = 'utf8';
$db['local_dev']['dbcollat'] = 'utf8_general_ci';
$db['local_dev']['swap_pre'] = '';
$db['local_dev']['autoinit'] = TRUE;
$db['local_dev']['stricton'] = FALSE;
[snip]
使用上述配置,一旦我加载控制器,我就会收到以下错误消息:
Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in
/Library/WebServer/Documents/system/database/drivers/pdo/pdo_driver.php:114 Stack trace: #0
/Library/WebServer/Documents/system/database/drivers/pdo/pdo_driver.php(114): PDO->__construct('localhost:/tmp/...', 'root', '', Array) #1 /Library/WebServer/Documents/system/database/DB_driver.php(115): CI_DB_pdo_driver->db_pconnect() #2
/Library/WebServer/Documents/system/database/DB.php(148): CI_DB_driver->initialize() #3
/Library/WebServer/Documents/system/core/Loader.php(346): DB('', NULL) #4
/Library/WebServer/Documents/system/core/Loader.php(1171): CI_Loader->database() #5
/Library/WebServer/Documents/system/core/Loader.php(152): CI_Loader->_ci_autoloader() #6
/Library/WebServer/Documents/system/core/Con in
/Library/WebServer/Documents/system/database/drivers/pdo/pdo_driver.php on line 114
我尝试从 github 上的文件中换出“pdo_driver.php”文件,如下所示: http://codeigniter.com/forums/viewthread/206124/ ...但这只会产生其他错误,更不用说对尽可能不想接触系统文件的新手感到不安了。
这个线程似乎也暗示需要破解“pdo_driver.php”系统文件: CodeIgniter PDO database driver not working 不过,对我来说似乎很奇怪,(有人认为)需要对系统文件进行 hack 才能使 PDO 在 CI v.2.1.1 中工作,对吧?
感谢我可以尝试的任何建议。
【问题讨论】:
-
感谢 Yan,(我已经看到了)...但看起来这只是由试图安装 custom PDO hack 的人开始的旧对话代码点火器,而不是我想要做的 - 只是让受支持的(开箱即用)PDO驱动程序运行......所以对我没有帮助。