【问题标题】:Codeigniter Can't Connect to External SQL ServerCodeigniter 无法连接到外部 SQL Server
【发布时间】:2016-08-03 05:17:12
【问题描述】:

我正在尝试将我的 codeigniter 框架连接到外部数据库。但它显示错误

发生数据库错误无法连接到您的数据库服务器 使用提供的设置。文件名:core/Loader.php 行号: 346

然后,我将这个插入到 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__); 

但它显示

遇到 PHP 错误 严重性:8192 消息:mysql_connect():不推荐使用 mysql 扩展并将 将来被删除:改用 mysqli 或 PDO 文件名:config/database.php 行号:79

遇到 PHP 错误 严重性:警告 消息:mysql_connect():无法连接到 MySQL 服务器 '167.114.xxx.xxx' (111) 文件名:config/database.php 行号:79

无法连接到数据库,因为:无法连接到 MySQL 服务器 在'167.114.xxx.xxx'(111)

然后我尝试在 codeigniter 目录之外创建这个(在 public_html 中)

<?php
$servername = "167.114.xxx.xxx";
$username = "myusername";
$password = "dbpass";
$database = "dbname";

// Create connection
$conn = mysql_connect($servername, $username, $password, $database);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
echo "Connected successfully";
?>

它显示连接成功。所以我该怎么做?而 config/database.php 中的 db 详细信息与上面相同

【问题讨论】:

  • 您在codeigniter外部尝试的连接是在同一台服务器上吗?您确定 MySQL 服务器正在接受外部连接并且用户具有正确的权限吗?
  • 警告:您使用的 an obsolete database API 已从最新版本的 PHP 中删除。你应该使用modern replacement
  • @BeoWulf 是的,我尝试的连接与 codeigniter 在同一台服务器上。如果它没有接受外部连接的权限,那么第二个如何给出输出“连接成功”
  • @YudhistiraBayu 它给出了“连接成功”,因为您使用了错误的方法。 -&gt;connection_error 属性仅适用于 MySQLi,不适用于(已弃用的)MySQL lib。因此,永远不会有$conn-&gt;connect_error,因此条件永远不会为真。你的权利是if(!$conn)。最正确的是切换到 MySQLi 或 PDO。请参阅下面的答案以了解正确的方法。

标签: php mysql database codeigniter


【解决方案1】:

默认情况下,MySQL 会拒绝来自外部的连接。

您的 MySQL 服务器位于何处?通常,如果您使用一些网络托管服务,它们允许您从他们的 CPanel 解锁外部连接。请注意,它们中的大多数都需要一些时间才能真正激活。

另外,请注意mysql_connect 不返回对象,而只是返回资源(连接 ID)。因此,如果您真的想继续使用已弃用(旧)的 MySQL API,请执行以下操作:

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); // note that if the port is different from 3306, you must do: 'server:port'
if (!$link) {
    die('Could not connect ' . mysql_error());
}
echo 'Connection successfull';
mysql_close($link);

但是,建议使用 MySQLi 或 PDO 之类的东西,因为 MySQL 扩展由于长时间不更新、缺乏 OOP 支持、缺乏新的 MySQL 功能支持等原因而被弃用。

使用 MySQLI 的替代方法,来自 PHP 手册:

<?php
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");

if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;

mysqli_close($link);

【讨论】:

    【解决方案2】:

    1) 查看/etc/mysql/my.cnf 文件并使其具有以下几行:

    bind-address = 0.0.0.0
    # skip-networking
    

    2) 运行/etc/init.d/mysql restart 或类似的东西来重新启动mysql以从外部打开连接

    3) 进入mysql控制台并执行:

    GRANT ALL ON database_name.* to 'remote_user'@'app_servers_global_ip' IDENTIFIED BY 'very_hard_password';
    FLUSH PRIVILEGES;
    

    4) 在您的config/database.php中有确切的代码

    $active_group = 'remote';
    $query_builder = TRUE;
    
    $db['remote'] = array(
        'dsn'   => '',
        'hostname' => 'database_remote_ip_here',
        'username' => 'remote_user',
        'password' => 'very_hard_password',
        'database' => 'database_name',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => FALSE,
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => FALSE
    );
    

    【讨论】:

      猜你喜欢
      • 2020-06-12
      • 2014-03-25
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多