Как подключиться к удаленной базе данных mysql с помощью php (размещенной на dotCloud)
Я не могу подключиться к своей базе данных, расположенной в 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>";
}
Что я делаю неправильно?
2 answers
В вашем коде есть пара ошибок.
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";
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";