new example ejemplos consulta conexion php mysql mysqli

example - PHP MySQLi Lock Tables Query a veces no completa



new mysqli php example (0)

Estoy intentando bloquear algunas tablas mientras ejecuto algún código y desbloqueo de las tablas cuando termino.

Proceso:

  1. Run Lock Tables MySQL Query.
  2. Ejecuta un código PHP.
  3. Ejecute Unlock Tables MySQL Query.

Mientras ejecuta este proceso, 9 de cada 10 veces todo funciona perfectamente. A veces, cuando ejecuto mi consulta, ninguna respuesta proviene de MySQL y PHP solo espera una respuesta. Como no ocurre ninguna respuesta, nunca llego a los pasos 2 o 3 y la mesa permanece bloqueada indefinidamente. Estoy ejecutando exactamente la misma consulta de Lock Tables en cada intento.

Estoy bloqueando numerosas tablas. A continuación se muestra un ejemplo similar a mi consulta de tabla real. Estoy usando la misma tabla varias veces con diferentes alias en función de las consultas que estoy tratando de evitar para acceder a las tablas.

$sql = "LOCK TABLES table1 as t1 WRITE , table2 as t2 WRITE , table3 WRITE , table2 WRITE , table4 WRITE , table1 WRITE , table5 WRITE , table5 as t5 WRITE , table6 as t6 WRITE , table7 as t7 WRITE , table7 WRITE , table8 as t8 WRITE , table9 t9 WRITE , table10 t10 WRITE , table11 t11 WRITE , table12 WRITE;"; $this->mysqli = new mysqli( $this->credentials->server , $this->credentials->user , $this->credentials->password , $this->credentials->database ); try{ error_log(''before first attempt lock tables ''.$sql); $this->mysqli->query($sql); error_log(''after first attempt lock tables''); } catch (Exception $e){ error_log(''Error locking tables: ''.$e->getMessage()); } error_log(''After try catch.''); if($this->mysqli->error){ error_log(''lock table error: ''.$this->mysqli->error); }

Cuando el proceso falla, veo "antes de las tablas de bloqueo del primer intento" en mi registro de errores de PHP. No veo ninguna de las otras llamadas error_log (). Después de algunas comprobaciones, determiné que es porque PHP no ha recibido una respuesta de MySQL.

Nunca entiendo la excepción de captura, ya que MySQL no devuelve un error. MySQL no devuelve nada a menos que mate manualmente el proceso de MySQL Lock Tables.

Si no elimino el proceso, el código PHP nunca deja de esperar una respuesta de mysql.