Conectar a MySQL mediante un socket en una aplicación Silex

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

#1

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?