FAQ PHP
FAQ PHPConsultez toutes les FAQ
Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 18 septembre 2021
Pour installer MySQLi il faut rajouter les options suivantes à la directive ./configure lors de l'installation de PHP à partir des sources :
--with-mysqli=/usr/local/mysql/bin/ --without-mysql
/usr/local/mysql/bin/ est à remplacer par le chemin du binaire mysql_config de votre client MySQL.
Depuis PHP 5, cette extension est incluse de base dans PHP.
Il est possible d'exécuter plusieurs requêtes à la fois en utilisant mysqli_multi_query() :
mysqli_multi_query($db
,
'
UPDATE une_table SET compteur = compteur + 1; DELETE FROM une_table WHERE compteur > 100
'
);
Une alternative est d'appeler mysqli_query() pour chacune des requêtes.
Il faut considérer les résultats des différentes requêtes comme une liste. C'est à dire qu'on traite ces résultats l'un après l'autre et dans l'ordre dans lequel les requêtes ont été effectuées. La fonction mysqli_store_result() permet de charger le résultat de la requête et la fonction mysqli_next_result() permet de savoir s'il en reste et de préparer le prochain résultat. Cette dernière ne doit cependant pas être appelée pour le tout premier résultat, d'où une itération de type do {
}
while();
. Vous pouvez ensuite utiliser normalement les fonctions mysqli_fetch_* dans cette boucle pour exploiter le résultat courant. Voici un exemple pour différentes requêtes :
$db
=
mysqli_connect('
localhost
'
,
'
julp
'
,
'
motdepasse
'
,
'
developpez
'
);
$requetes
=
array(
'
SELECT * FROM boutique
'
,
'
SHOW DATABASES
'
);
if (mysqli_multi_query($db
,
implode('
;
'
,
$requetes
)))
{
// Ne teste que la première
$i
=
0
;
do
{
if ($result
=
mysqli_store_result($db
))
{
echo '
<table border="1"><caption>
'
.
$requetes
[
$i
]
.
'
</caption><tr>
'
;
while ($field
=
mysqli_fetch_field($result
))
{
echo '
<th>
'
.
$field
->
name .
'
</th>
'
;
}
echo '
</tr>
'
;
while ($row
=
mysqli_fetch_assoc($result
))
{
echo '
<tr>
'
;
foreach ($row
as $value
)
{
echo '
<td>
'
.
$value
.
'
</td>
'
;
}
echo '
</tr>
'
;
}
echo '
</table>
'
;
}
$i
++;
}
while (mysqli_next_result($db
));
}
Note : les requêtes de modification (comme UPDATE, DELETE ou INSERT) ne renvoyant aucun résultat, la fonction mysqli_store_result() ne les fera, par conséquent, pas apparaître.
En PHP avant la version 5.3 : non, c'est impossible.
À partir de PHP 5.3 : il est possible d'avoir un connexion persistante grâce au pilote Mysqlnd natif dans PHP.
<?php
$host
=
"p:localhost"
;
$port
=
3306
;
$socket
=
"/tmp/mysql.sock"
;
$user
=
"root"
;
$password
=
"password"
;
$dbname
=
"test"
;
$conn
=
new
mysqli
($host
,
$user
,
$password
,
$dbname
,
$port
,
$socket
)
or
die('Impossible de se connecter à la base de données : '
.
mysqli_connect_error());
?>
Le troisième paramètre facultatif de la fonction mysqli_query (le deuxième pour la méthode équivalente query) a été fixé à la valeur MYSQLI_STORE_RESULT qui indique que la connexion doit refuser toute demande tant que le résultat de la dernière requête effective n'a pas été libéré. Les solutions sont donc de libérer ce résultat (fonction mysqli_free_result ou méthode free_result) ou de supprimer ce paramètre, voire de l'expliciter à la valeur MYSQLI_STORE_RESULT.