【问题标题】:Codeigniter unable to connect to MSSQL databaseCodeigniter 无法连接到 MSSQL 数据库
【发布时间】:2020-03-07 08:18:17
【问题描述】:

在 CodeIgniter 尝试连接到 Unable to connect to the database 的 mssql(remote connect) 时出现错误,该错误并非每次连接都会出现。有时出现有时不出现

这就是为什么如果反复出现连接问题,我无法获取数据并且我的服务器会变慢

我的连接配置在这里,

$db['mssql'] = array(
    'dsn'   => '',
    'hostname' => 'IP,port',
    'username' => '********',
    'password' => '********',
    'database' => '********',
    'dbdriver' => 'sqlsrv',
    '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
);

以及来自模型的示例查询;

public function getBanks($accountCode,$currency){
    $this->Mssql = $this->load->database('mssql',TRUE);
    $this->Mssql->select('AccountingCode,BankName,BranchCode,BranchName,IbanNo');
    $this->Mssql->from('Bank');
    $this->Mssql->where(array('AccountingCode'=>$accountCode,'Curr'=>$currency));
    return $this->Mssql->get()->result();
}

服务器功能: CodeIgniter 3.1 在 centos VPS 服务器上使用 whm/cpanel。

远程 Mssql: Microsoft SQL Server 2008 R2 (SP3),

编辑:有时查询需要很长时间或超时。但通常需要 3-4 秒。下面的长期例子

Uptime:  223 seconds
Executable: 
/opt/cpanel/ea-php73/root/usr/sbin/php-fpm
Command Line (often faked in exploits):
php-fpm: pool mydomian_com                         
Network connections by the process (if any):
tcp: centos:35097 -> mssql:1490
Files open by the process (if any):
/dev/null
/var/cpanel/php/sessions/ea- 
php73/ci_session2c2f2a2567083e33da437a984c0c6171352aa8eb

【问题讨论】:

  • 仅供参考; SQL Server 2008(R2) 现在完全不受支持,强烈建议您尽快升级。
  • 如果它有时可以工作,但当您遇到服务器缓慢时失败,那么这听起来像是服务器问题,而不是 PHP 问题。
  • @Lamu,我对此无权,@Magnus Eriksson,我认为缓慢的原因是在连接期间无法得到答案

标签: php sql-server codeigniter centos cpanel


【解决方案1】:

如果你的数据库和 web 脚本在同一个服务器,那么你可以保持 localhost 作为主机名..

$db['default'] = array(
'dsn'   => '',
'hostname' => "localhost",
'username' => "username",
'password' => "password",
'database' => "db_name",
'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

);

【讨论】:

  • mssql 数据库是远程的,不在同一台服务器上,db driver 应该是 sqlsrv 因为数据库是 sql server
  • 如果是远程服务器,将 IP 保留为主机名,并在您的数据库服务器中将数据库服务器 ip 设置为绑定地址。希望它能正常工作
猜你喜欢
  • 2013-03-15
  • 2019-04-24
  • 1970-01-01
  • 2019-06-09
  • 2015-09-30
  • 2018-05-16
  • 2010-10-02
  • 2023-03-06
相关资源
最近更新 更多