Problem with mysqli_options and persistent connections in mysqli.
Personne n'a encore pris cette issue.
- Langage dominant
- C
- Étoiles
- 40.4k
- Forks
- 8.2k
- Merge moyen
- 2 j 13 h
- PR mergées (30 j)
- 96
Description
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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Le rapport identifie mysqli_init(), mysqli_options(), mysqli_real_connect() et les connexions persistantes p: ; commencez par reproduire le script PHP fourni avec l’ordre documenté des options. Aucun fichier source ni aucun test n’est indiqué ; suivez donc la manière dont l’option est gérée lorsqu’une connexion défectueuse du pool est remplacée. C’est terminé lorsque l’option reste effective et que la deuxième requête renvoie un entier.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- mysql, php
- Domaine
- databases
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100