CodeIgniter:无法使用提供的设置错误消息连接到数据库服务器

One*_*ema 49 php mysql connection mysqli codeigniter

我使用MySQL驱动程序就好了.我想改用MySQL驱动程序,但是只要我更改它(只需在MySQL末尾添加'i',并添加端口号)我就会收到以下错误消息

发生数据库错误

无法使用提供的设置连接到数据库服务器.

文件名:core/Loader.php

行号:232

我的设置看起来像这样:

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

where
$hostname = 'localhost';
$username = 'myusernamegoeshere';
$password = 'mypasswordgoeshere';
$database = 'mydatabasenamegoeshere'; 
Run Code Online (Sandbox Code Playgroud)

我正在使用:

CI 2.0.2 php 5.3.4 Apache/2.2.17(Unix)mysql 5.5.13 mysql.default_port 3306

我做错了吗?

谢谢,

Val*_*yev 104

我认为,PHP配置存在问题.
首先,使用./config/database.php末尾的脚本调试数据库连接:

...
  ...
  ...
  echo '<pre>';
  print_r($db['default']);
  echo '</pre>';

  echo 'Connecting to database: ' .$db['default']['database'];
  $dbh=mysql_connect
  (
    $db['default']['hostname'],
    $db['default']['username'],
    $db['default']['password'])
    or die('Cannot connect to the database because: ' . mysql_error());
    mysql_select_db ($db['default']['database']);

    echo '<br />   Connected OK:'  ;
    die( 'file: ' .__FILE__ . ' Line: ' .__LINE__); 
Run Code Online (Sandbox Code Playgroud)

然后看看问题是什么.

  • 到目前为止最好的答案.我得到错误,然后当我用$ db ['default'] ['hostname'] =':/ Application /MAMP/tmp/mysql/mysql.sock'替换默认主机名时; 有效.多亏了这里http://stackoverflow.com/questions/4219970/warning-mysql-connect-2002-no-such-file-or-directory-trying-to-connect-vi (4认同)
  • 这应该是公认的答案.你真的救了我的一天.我的问题很简单,我看不到,密码错字!你的脚本帮我看了.谢啦! (3认同)

ims*_*med 50

今天我在实时服务器中遇到了这种问题,我解决了改变这条线的问题

$db['default']['db_debug'] = TRUE;
Run Code Online (Sandbox Code Playgroud)

$db['default']['db_debug'] = FALSE;
Run Code Online (Sandbox Code Playgroud)

  • 好的,有人可以解释为什么这会导致连接问题?我很沮丧,我失去了大约一个小时试图弄清楚我的项目是如何在一夜之间破坏的,这就解决了.我不明白为什么. (2认同)

小智 29

对我来说问题出在php.ini文件中.mysql.default_socket属性指向不存在的目录中的文件.该属性指向/var/mysql/mysql.sock但在OSX中,该文件位于/tmp/mysql.sock.

一旦我更新了php.ini中的条目并重新启动了网络服务器,问题就解决了.

  • 请注意,有两种设置:`mysql.default_socket`*和*`pdo_mysql.default_socket`. (3认同)

小智 29

我通过改变解决了这个问题

$db['default']['pconnect'] = TRUE;$db['default']['pconnect'] = FALSE;

/application/config/database.php中


Bhu*_*hal 17

SET $db['default']['db_debug'] 为FALSE而不是TRUE.

$db['default']['db_debug'] = FALSE;
Run Code Online (Sandbox Code Playgroud)


Mar*_*rcM 5

扩展 @Valeh Hajiyev 对于mysqli驱动程序测试的伟大而清晰的答案:

使用 ./config/database.php 末尾的脚本调试数据库连接:

/* Your db config here */ 
$db['default'] = array(
  // ...
  'dbdriver'     => 'mysqli',
  // ...
);

/* Connection test: */

echo '<pre>';
print_r($db['default']);
echo '</pre>';

echo 'Connecting to database: ' .$db['default']['database'];

$mysqli_connection = new MySQLi($db['default']['hostname'],
                                $db['default']['username'],
                                $db['default']['password'], 
                                $db['default']['database']);

if ($mysqli_connection->connect_error) {
   echo "Not connected, error: " . $mysqli_connection->connect_error;
}
else {
   echo "Connected.";
}
die( 'file: ' .__FILE__ . ' Line: ' .__LINE__);
Run Code Online (Sandbox Code Playgroud)