3

dotCloudにあるデータベースに接続できません。私は試した:

$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(net :: ERR_EMPTY_RESPONSE):サーバーはデータを送信せずに接続を閉じました」というメッセージが表示されます。

次のようにして、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>";
}

私は何が間違っているのですか?

4

2 に答える 2

12

コードにいくつか問題があります。

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ポートを使用していません。これは、3306の標準ポートでmysqlを実行しないため、dotCloudで必要です。

あなたのコード:

$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";
于 2013-03-04T21:13:33.707 に答える
-1
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";
于 2013-03-02T01:14:13.610 に答える