una strip_tags remove paso lista etiquetas datos crear conexion conectar con como archivo php mysql pdo connection

strip_tags - La DOP de PHP está ignorando la opción ATTR_TIMEOUT para MySQL cuando no se puede acceder al servidor



remove html tags php (5)

Estoy probando escenarios en los que no se puede acceder al servidor mysql poniendo una IP aleatoria para tratar de conectarse. Configuré las opciones de PDO para que PDO::ATTR_TIMEOUT => 1 después de un segundo usando PDO::ATTR_TIMEOUT => 1 . Sin embargo, todavía lleva 30 segundos lanzar una excepción. Supongo que este tiempo de espera solo se aplica al tiempo real de conexión de mysql, no al servidor en el que se está ejecutando mysql.

¿Qué opciones de PHP necesito cambiar para que se agote el tiempo de conexión con el servidor mysql?


PDO :: ATTR_TIMEOUT: especifica la duración del tiempo de espera en segundos. No todos los controladores admiten esta opción, y su significado puede diferir de un controlador a otro . Por ejemplo, sqlite esperará hasta este valor de tiempo antes de renunciar a obtener un bloqueo de escritura, pero otros controladores pueden interpretarlo como una conexión o un intervalo de tiempo de espera de lectura.

El documento indica claramente que podría no significar un intervalo de tiempo de espera de conexión o, a veces, el controlador no lo admite.


En el php.ini puede actualizar esta variable de configuración:

mysql.connect_timeout = 1



Sólo hay que poner

ini_set("default_socket_timeout", 2);

antes de su DOP () conecte la cadena.

(Probado en Windows, también debería estar bien en Linux).

¿Por qué?

Persiguiendo esto a través del manual:

El controlador mysqlnd usa sockets para la conexión subyacente, y para establecer los tiempos de espera, debe usar las funciones de tiempo de espera de socket (flujo). (Ref: http://php.net/manual/en/mysqlnd.notes.php )

Usar mysqlnd significa usar secuencias de PHP para la conectividad subyacente. Para mysqlnd, se debe consultar la documentación de secuencias de PHP (Streams) en detalles como la configuración del tiempo de espera, no la documentación de la biblioteca de cliente de MySQL.

Si desea más control, entonces podría controlar más específicamente el socket real: no lo he probado, ya que solo es Unix. Para configurar el socket que mysqlnd usa, puede especificar el socket usando la configuración de ini (Ref: http://php.net/manual/en/ref.pdo-mysql.connection.php )

Si se compila PDO_MYSQL contra mysqlnd, se puede establecer un socket predeterminado a través de la configuración pdo_mysql.default_socket.

Consulte http://php.net/manual/en/ref.pdo-mysql.php#ini.pdo-mysql.default-socket acerca de esa configuración

Es posible que luego pueda configurar el tiempo de espera utilizando http://php.net/manual/en/function.stream-set-timeout.php

Pero probablemente sea más fácil establecer el valor predeterminado y luego restablecer una vez que haya terminado ...


$host = ''192.168.1.36''; $dbname = ''test''; $username = ''test''; $password = ''''; $start = time(); try { $db = new PDO( "mysql:host=$host;dbname=$dbname", $username, $password, array( PDO::ATTR_TIMEOUT => 1, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ) ); } catch(Exception $e) { echo time() - $start; echo "/n"; echo $e->getMessage(); }

Este fragmento de código debería resolver su problema.

diferencia de mysqli, mysqlnd, pdo-mysql:

  • (en desuso) mysqlnd significa el controlador nativo msyql cuyas funciones son de procedimiento
  • mysqli forma de objeto de mysql diriver
  • pdo-mysql es un complemento para la abstracción de la base de datos pdo para permitir la conexión a la base de datos mysql.