oujood.com


Utilisation de multi_query() et mysqli_multi_query() en PHP

PHP Version: 5+

PHP est un langage de programmation polyvalent qui offre de nombreuses fonctionnalités pour interagir avec des bases de données. Lorsque vous travaillez avec MySQL, vous pouvez être confronté à des situations où vous devez exécuter plusieurs requêtes SQL en une seule fois. Pour cela, PHP propose deux méthodes : multi_query() et mysqli_multi_query().

1. Définition

La fonction multi_query() et la méthode mysqli_multi_query() sont utilisées pour exécuter plusieurs requêtes SQL simultanément sur une connexion MySQL. Cela peut être utile lorsque vous devez effectuer des opérations complexes qui impliquent plusieurs requêtes.

2. Syntaxes

Syntaxe orientée objet :

$mysqli -> multi_query($query) 

$query est une chaine de caractères avec une seulle requête ou plusieurs requêtes séparées par des ";"

Syntaxe procédurale :

mysqli_multi_query(connection, query)

$query est une chaine de caractères avec une seulle requête ou plusieurs requêtes séparées par des ";

3. Valeurs possibles et paramètres

Les fonctions multi_query() et mysqli_multi_query() prennent en paramètre la connexion MySQL active et une chaîne de requêtes SQL séparées par des points-virgules.

4. Exemples pratiques

Exemple 1

Voici un exemple pratique où nous utilisons multi_query() pour effectuer une série de requêtes SQL :

Version procédurale du code avec mysqli_multi_query()

Exemple :       Copier le code

    <?php
    $conn = mysqli_connect("localhost", "utilisateur", "motdepasse", "basededonnees");

    $queries = "
        INSERT INTO produits (nom, prix) VALUES ('Produit A', 10.99);
        INSERT INTO produits (nom, prix) VALUES ('Produit B', 12.99);
        UPDATE commandes SET statut = 'Expédiée' WHERE id = 1;
    ";

    if (mysqli_multi_query($conn, $queries)) {
        echo "Les requêtes ont été exécutées avec succès.";
    } else {
        echo "Une erreur s'est produite : " . mysqli_error($conn);
    }

    mysqli_close($conn);
   	 ?>
    

Version orientée objet du code avec multi_query() :

Exemple :       Copier le code

    <?php
	// Connexion à la base de données en utilisant MySQLi (Orienté objet)
    $mysqli = new mysqli("localhost", "utilisateur", "motdepasse", "basededonnees");

    // Vérification de la connexion
    if ($mysqli->connect_error) {
        die("La connexion a échoué : " . $mysqli->connect_error);
    }

    // Chaîne de requêtes SQL séparées par des points-virgules
    $queries = "
        INSERT INTO produits (nom, prix) VALUES ('Produit A', 10.99);
        INSERT INTO produits (nom, prix) VALUES ('Produit B', 12.99);
        UPDATE commandes SET statut = 'Expédiée' WHERE id = 1;
    ";

    // Exécution des requêtes
    if ($mysqli->multi_query($queries)) {
        echo "Les requêtes ont été exécutées avec succès.";
    } else {
        echo "Une erreur s'est produite : " . $mysqli->error;
    }

    // Fermeture de la connexion
    $mysqli->close();
	 ?>
    

Exemple 2: Création d'une table et insertion de données

Voici un autre exemple pratique où nous utilisons multi_query() pour effectuer une série de requêtes SQL :

L'exemple suivant montre comment créer une table et insérer des données en une seule fois.

Version orientée objet du code avec multi_query() :

Exemple :       Copier le code

  
    <?php
    // Crée un objet MySQLi
$mysqli = new mysqli();

// Initialise l'objet
$mysqli->init();

// Établit une connexion à la base de données
$mysqli->real_connect('localhost', 'root', '', 'teste');

// Exécuter une requête
$link=$mysqli;
if ($link->connect_error) {
    die('Erreur de connexion : ' . $link->connect_error);
}else echo 'connexion réusie';
echo "<br>";
$queries = [
    'CREATE TABLE IF NOT EXISTS my_table (id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, PRIMARY KEY (id))',
    'INSERT INTO my_table (name) VALUES ("John Doe")',
    'SELECT * FROM my_table',
];

// Convertit le tableau en chaîne
$queries = implode(';', $queries);

// Exécute la requête
if ($link->multi_query($queries)) {
    echo 'Les requêtes ont été exécutées avec succès.';
} else {
    echo 'Une erreur s\'est produite lors de l\'exécution des requêtes. '. mysqli_error($link);
}
    ?>

Version procédurale du code avec mysqli_multi_query()

Exemple :       Copier le code

    <?php
    // Crée une connexion MySQLi procédurale
$mysqli = mysqli_connect('localhost', 'root', '', 'teste');

// Vérifie la connexion
if (!$mysqli) {
    die('Erreur de connexion : ' . mysqli_connect_error());
} else {
    echo 'Connexion réussie<br>';
}

$queries = [
    'CREATE TABLE IF NOT EXISTS my_table (id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, PRIMARY KEY (id))',
    'INSERT INTO my_table (name) VALUES ("John Doe")',
    'SELECT * FROM my_table',
];

// Convertit le tableau en chaîne
$queries = implode(';', $queries);

// Exécute la requête
if (mysqli_multi_query($mysqli, $queries)) {
    echo "Les requêtes ont été exécutées avec succès.";
} else {
    echo "Une erreur s'est produite lors de l'exécution des requêtes. " . mysqli_error($mysqli);
}

// Ferme la connexion
mysqli_close($mysqli);
    ?>
    

5. Astuces et conseils

  • Assurez-vous que vos requêtes SQL sont correctement formées et sécurisées pour éviter les injections SQL.
  • Gardez à l'esprit que les transactions ne sont pas prises en charge avec `multi_query()`. Si vous avez besoin de transactions, utilisez `mysqli_begin_transaction()` et `mysqli_commit()`.
  • Gérez les résultats de chaque requête dans une boucle pour traiter les données de manière appropriée.

Avis de sécurité : Détection d'injection SQL Si la requête inclut des variables d'entrée, il est fortement recommandé d'utiliser des déclarations préparées paramétrisées. En alternative, il est essentiel de bien formater les données et d'échapper correctement toutes les chaînes de caractères en utilisant la fonction mysqli_real_escape_string().

En conclusion, multi_query() et sont des outils puissants pour exécuter plusieurs requêtes SQL en une seule fois en PHP. Utilisez-les judicieusement pour améliorer les performances de votre application lors de l'interaction avec une base de données MySQL.


Voir aussi nos tutoriel :

L'Attribut dropzone

Spécifie si les données déplacées sont copiées, déplacées ou liées, alors ignorés

CSS3 La propriété backface-visibility

La propriété backface-visibility définit si l’arrière d’un élément doit être visible ou pas quant elle est face à l'écran.

max-height

Définit la hauteur maximale d'un élément