首页 文章

Codeigniter无法连接到外部SQL Server

提问于
浏览
4

我正在尝试将我的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 '
Connected OK:' ; die( 'file: ' .__FILE__ . ' Line: ' .__LINE__);

但它表明

遇到PHP错误严重性:8192消息:mysql_connect():不推荐使用mysql扩展,将来将删除:使用mysqli或PDO而不是文件名:config / database.php行号:79遇到PHP错误严重性:警告消息:mysql_connect():无法连接到'167.114.xxx.xxx'上的MySQL服务器(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细节与上面相同

2 回答

  • 0

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

    你的MySQL服务器在哪里?通常,如果您使用某些Web托管服务,它们允许您从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这样的东西,因为长时间不更新,缺乏OOP支持,缺乏新的MySQL功能支持等等,不推荐使用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);
    
  • 0

    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
    );
    

相关问题