Cómo conectarse a la base de datos remota de mysql usando php (alojado en dotCloud)

No puedo conectarme a mi base de datos que reside en dotCloud. Lo intenté:

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

y

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

y

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

y

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

pero no se puede conectar, y obtengo el “Error 324 (net :: ERR_EMPTY_RESPONSE): el servidor cerró la conexión sin enviar ningún dato”.

Recupero variables dinámicamente sobre el script mysqli con lo siguiente:

 $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'; 

También tengo el siguiente código debajo del script 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 "

Successfully connected!!

"; }

¿Qué estoy haciendo mal?

Hay un par de cosas mal en tu código.

1. Tu variable $ remote_server está usando una sola cotización

 $remote_server = '$db_host:$db_port'; 

Esto significa que $ remote_server no expandirá las variables $ db_host y $ db_port. Deberías usar comillas dobles. Si utilizó la variable tal como está, no funcionaría para usted.

 $remote_server = "$db_host:$db_port"; 

Consulte esta página para obtener más información: http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.single

2. No está utilizando el puerto mysql cuando se conecta, que se requiere en dotCloud ya que no ejecuta mysql en el puerto estándar de 3306.

Tu codigo:

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

El código correcto, usando las variables que ya has declarado arriba:

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

Puede encontrar más información aquí: http://www.php.net/manual/en/mysqli.quickstart.connections.php

Para un ejemplo completo, se verá así.

 $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";