Problem with mysqli_options and persistent connections in mysqli.
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- C
- Estrellas
- 40.4k
- Forks
- 8.2k
- Merge medio
- 2 d 13 h
- PR fusionados (30 d)
- 96
Descripción
Description
According to the documentation https://www.php.net/manual/en/mysqli.options.php
mysqli_options() should be called after mysqli_init() and before mysqli_real_connect().
But, when using persistent connections and the connection in the pool is broken,
when creating a new connection, the MYSQLI_OPT_INT_AND_FLOAT_NATIVE option is lost.
Setting the option AFTER calling real_connect solves the problem
The following code:
<?php
\mysqli_report(MYSQLI_REPORT_ERROR);
function connect(): mysqli {
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);
$mysqli->real_connect('p:127.0.0.1', 'user', 'password');
return $mysqli;
}
$mysqli1 = connect();
var_dump($mysqli1->query("SELECT 1")->fetch_row()[0]); // int
@$mysqli1->query("KILL {$mysqli1->thread_id}");
unset($mysqli1);
$mysqli2 = connect();
var_dump($mysqli2->query("SELECT 2")->fetch_row()[0]); // string, but int is expected
// next ok
$mysqli2->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);
var_dump($mysqli2->query("SELECT 3")->fetch_row()[0]); // int
Resulted in this output:
int(1)
string(1) "2"
int(3)
But I expected this output instead:
int(1)
int(2)
int(3)
PHP Version
PHP 8.0.14, 8.1.1
Operating System
Debian 9.13, Ubuntu 21.10
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
El informe identifica mysqli_init(), mysqli_options(), mysqli_real_connect() y las conexiones persistentes p:; empieza reproduciendo el script PHP proporcionado con el orden documentado de las opciones. No se nombra ningún archivo fuente ni ninguna prueba, así que sigue cómo se gestiona la opción cuando se reemplaza una conexión defectuosa del pool. Se considera terminado cuando la opción sigue siendo efectiva y la segunda consulta devuelve un entero.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- mysql, php
- Área
- databases
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100