Este es mi código main.php
solo para intentar conectarme a la base de datos MySQL y verificar si se puede conectar o no.
<?php $USER = "root"; $PASS = "";// I do have a password. I just haven't mentioned on StackOverflow $IP = "104.199.248.141"; $DB = "Contacts"; $conn = mysqli_connect($IP,$USER,$PASS,$DB,null,"/cloudsql/adiscontactbook:asia-east1:contacts-book"); if($conn != null) { print("Connected! :*"); mysqli_close($conn); } else { print("Can't connect! :("); } ?>
Y este es app.yaml
:
runtime: php55 api_version: 1 threadsafe: yes handlers: - url: /favicon\.ico static_files: favicon.ico upload: favicon\.ico - url: .* script: main.php
PUEDO conectarme a mi instancia de mysql a través de la terminal escribiendo:
mysql --host=104.199.248.141 --user=root --password
¡y la salida en el terminal está Connected! :*
.
Esta es la URL de mi aplicación: https://adiscontactbook.appspot.com/
Cuando escribo la URL en el navegador, aparece Can't connect! :(
.
PD: Le he dado permisos a mi aplicación y también a mi computadora local en la sección Authorize networks
para acceder a la instancia de mysql ingresando la dirección IP 35.185.186.77
(IP externa de mi aplicación) y 14.97.103.225
respectivamente.
¿Por qué no tengo problemas para acceder a él a través de la terminal pero no puedo conectarme a través del navegador escribiendo la URL?
Debe pasar nulo al parámetro $host
, ya que se está conectando a través de un socket.
$conn = mysqli(null, $USER, $PASS, $DB,null, "/cloudsql/adiscontactbook:asia-east1:contacts-book")
El quinto parámetro de mysqli_connect es el número de puerto y el sexto parámetro es la ruta del socket. Puede intentar omitir los parámetros quinto y sexto. Consulte la documentación de mysqli_connect ( http://php.net/manual/en/function.mysqli-connect.php )
Pasé un día entero tratando de resolver esto... estaba convirtiendo de mysql a mysqli en preparación para php7 y CloudSQL de segunda generación de appengine. No pude encontrar en ninguna parte del documento que tuviera que usar este formato de 6 parámetros para la función mysqli_connect().
Además, el ":" que precede al nombre del servidor en mysql_connect debe eliminarse (pero no la barra diagonal '/') cuando se usa con mysqli. Por eso:
$servername=":/cloudsql/project:us-east1:database";
se convierte en:
$servername="/cloudsql/project:us-east1:database";