Codeigniter 错误:调用未定义的函数 mysql_pconnect()

Posted

技术标签:

【中文标题】Codeigniter 错误:调用未定义的函数 mysql_pconnect()【英文标题】:Codeigniter error: Call to undefined function mysql_pconnect() 【发布时间】:2016-08-17 18:36:04 【问题描述】:

我已将我的 codeigniter 版本从 2.2.4 逐步更新到 3.0.6,但出现错误:

An uncaught Exception was encountered

Type: Error

Message: Call to undefined function mysql_pconnect()

Filename: path-to-project\system\database\drivers\mysql\mysql_driver.php

Line Number: 135

Backtrace:

File: path-to-project\application\controllers\Main.php
Line: 10
Function: __construct

File: path-to-project\index.php
Line: 315
Function: require_once

我刚刚用新的替换了我的 index.php 文件和系统目录,并根据教程对我的应用程序进行了一些更改。

这是主控制器:

class Main extends CI_Controller 

    function __construct()
    
        parent::__construct();
        $this->load->model('main_model');
    

是什么导致了问题?!

还有教程的this is the link。

【问题讨论】:

mysql_* 已从 php 5 中弃用并从 php 7 中删除。切换到 mysqli_* 或 PDO 另外,请提交该教程的链接。 现在,问题出在 codeigniter 上还是我在代码中使用了已弃用的 mysql? 在您的config/database.php 中使用这个:'dbdriver' => 'mysqli',(将mysql 更改为mysqli)。 【参考方案1】:

Deprecated features in PHP 5.5.x:

原来的 MySQL 扩展现已弃用,连接数据库时会产生 E_DEPRECATED 错误。相反,请使用 MySQLi 或 PDO_MySQL 扩展。

您正在使用已弃用的 'mysql' dbdriver。找到config/database.php 文件并将dbdriver 更改为使用'mysqli'

$db['default']['dbdriver'] = 'mysqli'; 

【讨论】:

是的,谢谢它的工作,但有一些问题,我正在配置 ci 的旧项目版本是 2.4.0 但在创建数据库并导入备份后,也在 config->database.php 'mysql '到'mysqli'。最后致命错误消失了,但 heder 的数据正在完善,但在正文内容的位置上显示 xammp 页面。不知道为什么。如果您有任何建议。【参考方案2】:

感谢Anant

我得出一个结论:

我将 config 文件夹中的旧 database.php 文件完全更改为新文件:

发件人:

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';
$db['default']['dbdriver'] = '';
$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;

收件人:

$db['default'] = array(
    'dsn'   => '',
    'hostname' => '',
    'username' => '',
    'password' => '',
    'database' => '',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

错误消失了!

【讨论】:

你的dbdriver配置值为空,你应该使用$db['default']['dbdriver'] = 'mysqli'; 您好,我已经应用了您的解决方案,但错误仍然出现。还有其他解决方案吗? 谢谢,你拯救了我的一天。 在哪里可以找到 application/config/database.php ???【参考方案3】:

转到 application/config/database.php 只需将mysql 更改为mysqli

喜欢 这是以前的:

 $db['default']['dbdriver'] = 'mysql';

这是在解决方案之后:

$db['default']['dbdriver'] = 'mysqli';

我只是将 mysql 更改为 mysqli。就是这样

我的错误是

致命错误:未捕获错误:调用未定义函数 mysql_pconnect() 在 E:\manish_data\software\xampp\htdocs\ci2\system\database\drivers\mysql\mysql_driver.php:92 堆栈跟踪:#0 E:\manish_data\software\xampp\htdocs\ci2\system\database\DB_driver.php(116): CI_DB_mysql_driver->db_pconnect() #1 E:\manish_data\software\xampp\htdocs\ci2\system\database\DB.php(149): CI_DB_driver->initialize() #2 E:\manish_data\software\xampp\htdocs\ci2\system\core\Loader.php(347): 数据库(数组,空)#3 E:\manish_data\software\xampp\htdocs\ci2\application\models\usermodel.php(20): CI_Loader->database() #4 E:\manish_data\software\xampp\htdocs\ci2\application\controllers\users.php(15): UserModel->getUsers() #5 E:\manish_data\software\xampp\htdocs\ci2\system\core\CodeIgniter.php(360): 用户->index() #6 E:\manish_data\software\xampp\htdocs\ci2\index.php(202): require_once('E:\manish_data\...') #7 main 抛出 E:\manish_data\software\xampp\htdocs\ci2\system\database\drivers\mysql\mysql_driver.php 在第 92 行

【讨论】:

哈哈老兄,你基本上只是复制了我的答案.. 但甚至没有解释为什么有必要更新dbdriver 您好@Sfili_81,请找出mysql和mysqli之间的区别,因此不同的数据库支持不同的驱动程序与应用程序连接。默认情况下,当您下载 xampp 时,xampp 具有 mysqli,您可以连接到 mysql 或具有不同驱动程序的任何其他 db 。你不仅是编码者。【参考方案4】:

如果您在托管网站时发生此错误,请确保设置正确的 PHP 版本(您的 CI 使用的版本)。

【讨论】:

以上是关于Codeigniter 错误:调用未定义的函数 mysql_pconnect()的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter“调用未定义的函数mysqli_init()”错误

Codeigniter 错误:调用未定义的函数 mysql_pconnect()

Codeigniter:对未定义函数 mysqli_init() 的致命错误调用

在 Codeigniter 中调用扩展辅助函数时未定义的函数

在Codeigniter中调用未定义的方法CI_DB_odbc_driver :: limit()

codeigniter 致命错误:调用未定义的方法 CI_DB_odbc_driver::update()