php – 在codeIgniter中不能与mysqli驱动程序一起使用的持久连接

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 在codeIgniter中不能与mysqli驱动程序一起使用的持久连接脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我在本地开发环境中有这个db-configuration

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = ''; //Actual username is put inside these quotes
$db['default']['password'] = '';
$db['default']['database'] = ''; //Actual name of database is put inside quotes
$db['default']['dbdriver'] = 'MysqL';
$db['default']['dbPRefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = APPPATH .'cache';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinIT'] = TRUE;
$db['default']['stricton'] = FALSE;

当我转移到生产服务器它不起作用所以我尝试了很多东西,但似乎有一件事似乎是将dbdriver更改为MysqLi而不是MysqL.但我也很想把db_debug放到FALSE(所以它“工作”不是正确的陈述)

我已经阅读了很多这方面的内容,但我在任何地方都找不到答案. (我不满意:“改为debug = false,它会起作用”)

我想看看实际问题是什么,所以我将本地服务器更改为MysqLi驱动程序,然后我收到错误

A Database Error Occurred

Unable to connect to your database server using the provided settings.

Filename: C:\Program Files\wamp\www\mellomgarden2\system\database\DB_driver.PHP

Line Number: 124

经过一番挖掘后,我发现db_connect()和db_pconnect()的工作方式完全相同:

>如果查看system / database / drivers / MysqLi / MysqLi_driver.PHP – 似乎connect()和pconnect()的工作方式完全相同,因为pconnect()只是调用connect()函数.

所以$db [‘default’] [‘pconnect’] = TRUE;使用MysqLi驱动程序时完全没用.

function db_connect()
{
    if ($this->port != '')
    {
        return @MysqLi_connect($this->hostname,$this->username,$this->password,$this->database,$this->port);
    }
    else
    {
        return @MysqLi_connect($this->hostname,$this->database);
    }

}
// --------------------------------------------------------------------

/**
 * PErsistent database connection
 *
 * @access  private called by the base class
 * @return  resource
 */
function db_pconnect()
{
    return $this->db_connect();
}

仔细看看上面的db_connect()和db_pconnect() – 这些都是有争议的.我删除了@的返回值然后得到了这个:

严重性:警告

消息:MysqLi_connect():( 08004/1040):连接太多

文件名:MysqLi / MysqLi_driver.PHP

行号:76

这是FAR更多的解释性错误

所以我的想法是MysqLi驱动程序的db_pconnect应该是这样的:

function db_pconnect()
    {       
                 $this->hostname = 'p:' . ltrim($this->hostname,'p:');                                  
                 return $this->db_connect();
    }

这是Codeigniter开发团队的完全错过,还是我错过了什么?

解决方法

参考 your other thread我假设你指定使用持久连接似乎是真的,但是看看CodeIgniter的代码我们可以得出一个不同的结论: The MySQL driver实际上注意到这个选项开始设置. Whereas the MySQLi driver,正如您正确分析的那样,没有.这也在 bug report中被注意到并且已经修复.

如你所见,the whole MySQLi driver class was rewritten in the development branch.

因此,到目前为止,您已经使用了持久连接,但是(不情愿地)在切换到MysqLi时停止使用它们,因为此修复程序尚未发布…如果这是一个选项,您可以尝试使用开发分支. (或者只替换这个单个文件……也应该工作.)

您的另一个选择是,就像我在其他答案中所述,您可以简要估计应用程序使用的连接,并根据您的实际需要调整max_connections限制.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 在codeIgniter中不能与mysqli驱动程序一起使用的持久连接全部内容,希望文章能够帮你解决php – 在codeIgniter中不能与mysqli驱动程序一起使用的持久连接所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。