Hola:
Hasta ahora no tenía ningún problema a la hora de conectar a la BD desde cualquier proyecto Silex. En los últimos días mi servidor ha cambiado el tipo de conexión y ahora para conectarse tengo que especificar el socket.
Si en un fichero prueba.php escribo:
$host_name = "localhost"; $database = "dbxxx"; $user_name = "dboxxx"; $password = "xxx"; $socket = "/tmp/mysql5.sock"; $connect = mysqli_connect($host_name, $user_name, $password, $database, $socket); if(mysqli_connect_errno()) { echo '<p>ERROR: '.mysqli_connect_error().'</p>'; } else { echo '<p>TODO BIEN</p>'; }
Me lo hace perfectamente sin problemas. Ahora bien en mi Silex original tenía:
$app->register(new Silex\Provider\DoctrineServiceProvider(), array( 'dbs.options' => array( 'mysql_read' => array( 'driver' => 'pdo_mysql', 'host' => 'localhost', 'dbname' => 'dbxxx', 'user' => 'dboxxx', 'password' => 'xxx', 'charset' => 'utf8mb4', ) ) ));
Y lo he cambiado por:
$app->register(new Silex\Provider\DoctrineServiceProvider(), array( 'dbs.options' => array( 'mysql_read' => array( 'driver' => 'pdo_mysql', 'host' => 'localhost', 'dbname' => 'dbxxx', 'user' => 'dboxxx', 'password' => 'xxx', 'unix_socket' => '/tmp/mysql.sock', 'charset' => 'utf8mb4', ) ) ));
Pero al ejecutarlo me da el siguiente error:
Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] No such file or directory
¿No se hace con unix_socket
? ¿Cuál es la forma correcta de hacerlo? Muchas gracias por adelantado.
Respuestas
La forma correcta de hacerlo sí que es con la opción unix_socket
. La configuración que has puesto la veo correcta, así que se me ocurre que quizás la ruta /tmp/mysql.sock
no es correcta y por eso el mensaje dice que ese archivo no existe. ¿Puedes acceder al servidor y comprobar si realmente ese archivo .sock
existe?
@javiereguiluz