如何使用php(托管在dotCloud上)连接到远程mysql数据库

问题描述:

我无法连接到我的数据库驻留在dotCloud。我想:如何使用php(托管在dotCloud上)连接到远程mysql数据库

$mysqli = new mysqli($db_host, $db_user, $db_password, $db_name); 

$mysqli = mysqli_connect($db_host, $db_user, $db_password, $db_name); 

$mysqli = new mysqli($remote_server, $db_user, $db_password, $db_name); 

$mysqli = mysqli_connect($remote_server, $db_user, $db_password, $db_name); 

,但连接失败,我也得到“错误324(净值:: ERR_EMPTY_RESPONSE):服务器关闭没有sendin的连接g任何数据。“

我找回动态上面下面的mysqli的脚本变量:

$env = json_decode(file_get_contents("/home/dotcloud/environment.json")); 
$db_user = $env->DOTCLOUD_DB_MYSQL_LOGIN; 
$db_password = $env->DOTCLOUD_DB_MYSQL_PASSWORD; 
$db_host = $env->DOTCLOUD_DB_MYSQL_HOST; 
$db_port = $env->DOTCLOUD_DB_MYSQL_PORT; 
$remote_server = '$db_host:$db_port'; 
//I also define $db_name here 
$db_name = 'mydbname'; 

我也有mysqli的脚本下面的下面的代码:

if (mysqli_connect_error()) { 
    die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error()); 
    $result["status"] = "failed"; 
    $result["message"] = "Failed to connect to database."; 
    echo json_encode($result); 
    exit; 
} else { 
    // Successfully connected! 
    $stmt = $mysqli->stmt_init(); 
    echo "<p>Successfully connected!!</p>"; 
} 

我在做什么错?

+0

您的$ db_name变量在哪里? – Stepo 2013-03-02 01:07:09

+0

@Stepo,我编辑了上面的代码以显示我定义$ db_name的位置。 – Naomi 2013-03-02 03:26:47

您的代码中有几个错误。

1.您$ remote_server的变量是使用单引号

$remote_server = '$db_host:$db_port'; 

这意味着$ remote_server的不会扩大$ DB_HOST和$ DB_PORT变量。你应该使用双引号。如果你使用了这个变量,它就不适合你。

$remote_server = "$db_host:$db_port"; 

更多信息,请参见本页面: http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.single

2.您不使用连接时,MySQL的端口,这是需要在dotCloud因为它不标准端口上运行mysql 3306

您的代码:

$mysqli = new mysqli($db_host, $db_user, $db_password, $db_name); 

正确的代码,使用变量,你上面已经宣布:

$mysqli = new mysqli($db_host, $db_user, $db_password, $db_name, $db_port); 

更多信息可以在这里找到:http://www.php.net/manual/en/mysqli.quickstart.connections.php

对于一个完整的例子,它看起来像这样。

$env = json_decode(file_get_contents("/home/dotcloud/environment.json")); 
$db_user = $env->DOTCLOUD_DB_MYSQL_LOGIN; 
$db_password = $env->DOTCLOUD_DB_MYSQL_PASSWORD; 
$db_host = $env->DOTCLOUD_DB_MYSQL_HOST; 
$db_port = $env->DOTCLOUD_DB_MYSQL_PORT; 
//I also define $db_name here 
$db_name = 'mydbname'; 

$mysqli = new mysqli($db_host, $db_user, $db_password, $db_name, $db_port); 
if ($mysqli->connect_errno) { 
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
} 

echo $mysqli->host_info . "\n"; 
+0

完美。我需要正确的语法。非常感谢你。 – Naomi 2013-03-04 23:49:19

+0

不客气。如果您觉得它对您有帮助,请随时投票给我的答案。 – 2013-03-05 11:35:09

+0

啊,是的,当然。我还是比较新的使用*。我点击了复选标记,但没有意识到我也可以点击向上箭头。 :) – Naomi 2013-03-05 22:22:40

try like this: I think it will help you. 

$connect = mysql_connect($mysql_host, $mysql_user, $mysql_password); 
if (!$connect) { 
    die('Could not connect: ' . mysql_error()); 
} 
//echo 'Connected successfully'; 

$db = mysql_select_db($mysql_database,$connect); 

if (!$db) echo"'Could not select database"; 
+0

谢谢您的建议。我试过了,它给了我这个错误(和页面没有加载):错误324(net :: ERR_EMPTY_RESPONSE):服务器关闭连接而不发送任何数据。 – Naomi 2013-03-02 01:37:18

+0

Outch! **请不要举例使用mysql_ *。此扩展从PHP 5.5.0开始已弃用。** – 2013-03-02 01:59:07

+0

您是否可以使用MySQL客户端(SQLYog,MySQL Workbench等)连接到MySQL主机? – juanchopx2 2013-03-02 02:56:25