簡體   English   中英

Codeigniter無法連接到外部SQL Server

[英]Codeigniter Can't Connect to External SQL Server

我正在嘗試將我的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():無法連接到'167.114.xxx.xxx'上的MySQL服務器(111)文件名:config / database.php行號:79

無法連接到數據庫,因為:無法連接到'167.114.xxx.xxx'上的MySQL服務器(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細節與上面相同

默認情況下,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);

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM