IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ PHP

FAQ PHPConsultez toutes les FAQ

Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 18 septembre 2021 

 
OuvrirSommaireBases de donnéesInterfaces de programmation (API)MySQLi

Pour installer MySQLi il faut rajouter les options suivantes à la directive ./configure lors de l'installation de PHP à partir des sources :

 
Sélectionnez
--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.

Créé le 26 juin 2006  par Cyberzoide

Lien : Comment installer une extension pour PHP ?

Il est possible d'exécuter plusieurs requêtes à la fois en utilisant mysqli_multi_query() :

 
Sélectionnez
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.

Créé le 20 juillet 2007  par Julp

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 :

 
Sélectionnez
$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.

Créé le 20 juillet 2007  par Julp

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.

 
Sélectionnez
<?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());
?>
Mis à jour le 8 mars 2011  par Josselin Willette, Gérard Ernaelsten

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.

Créé le 20 juillet 2007  par Julp

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Developpez.com Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.