Définit le résultat d'un calcul
set_local_infile_handler() est une fonction puissante qui peut être utilisée pour importer des données depuis des sources externes, telles que des API ou des services Web.
PHP Version: 5+
La fonction set_local_infile_handler() (ou mysqli_set_local_infile_handler() dans l'API orientée objet) permet de définir une fonction de rappel pour le traitement des données importées à l'aide de la commande LOAD DATA LOCAL INFILE.
La fonction set_local_infile_handler() est disponible dans les deux API, orientée objet et procédurale. La syntaxe est la suivante :
// API procédurale set_local_infile_handler(callable $handler, [int $handle = null]); // API orientée objet mysqli_set_local_infile_handler(mysqli $link, callable $handler, [int $handle = null]);
Le paramètre handler peut être une fonction anonyme, une fonction définie par l'utilisateur ou une méthode d'une classe. La fonction doit prendre trois paramètres et retourner un booléen. Si la fonction retourne true, la ligne est importée dans la base de données. Si la fonction retourne false, la ligne est ignorée.
Le paramètre handle est facultatif. Si aucun identifiant n'est fourni, la fonction de rappel est supprimée à la fin de la requête LOAD DATA LOCAL INFILE.
Voici un exemple d'utilisation de la fonction set_local_infile_handler() pour importer des données à partir d'un fichier texte :
Exemple : Copier le code
<?php function import_data($stream, $row, $eof) { // Traitement des données echo "Ligne $row : " . $stream->readLine() . PHP_EOL; // Retourner true pour importer la ligne return true; } // Importer les données set_local_infile_handler(import_data); $query = "LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE mytable"; mysqli_query($link, $query); ?>
Cet exemple imprime chaque ligne du fichier data.txt dans la console.
Un autre exemple consiste à utiliser la fonction set_local_infile_handler() pour vérifier les données importées avant de les insérer dans la base de données. Par exemple, on pourrait utiliser la fonction suivante pour vérifier que les données sont valides :
Exemple : Copier le code
<?php function validate_data($stream, $row, $eof) { // Vérifier la validité des données $data = json_decode($stream->readLine(), true); if (!is_array($data) || !array_key_exists("name", $data) || !array_key_exists("age", $data)) { return false; } // Retourner true pour importer la ligne return true; } ?>
Dans ce qui suit nous allons utiliser la base de données 'teste' avec une table 'perso' dont les champs (id, nom, prenom, email et age) et nous utilisons la connexion suivante : $seveur='localhost'; $utilisateur='root'; $motDePasse=''; $ma_base_de_données='teste'; // Connexion à la base de données $link = mysqli_connect($seveur, $utilisateur, $motDePasse, $ma_base_de_données);
Dans ce cas, nous allons importer des données d'un fichier texte appelé 'data.txt' dans la table 'perso'. Le fichier 'data.txt' contient les données suivantes :
Exemple : Copier le code
id;nom;prenom;email;age 1;John;Doe;john.doe@example.com;25 2;Jane;Doe;jane.doe@example.com;23
Exemple : Copier le code
<?php // Connexion à la base de données $link = mysqli_connect($serveur, $utilisateur, $motDePasse, $ma_base_de_donnees); // Définition de la fonction de rappel function import_data($stream, $row, $eof) { // Lire la ligne du fichier $line = $stream->readLine(); // Divisez la ligne en champs $fields = explode(";", $line); // Importer les données dans la base de données $query = "INSERT INTO perso (id, nom, prenom, email, age) VALUES ($fields[0], '$fields[1]', '$fields[2]', '$fields[3]', $fields[4])"; mysqli_query($link, $query); // Retourner true pour importer la ligne return true; } // Importer les données set_local_infile_handler('import_data'); $query = "LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE perso"; mysqli_query($link, $query); ?>
Exemple : Copier le code
<?php // Connexion à la base de données $db = new mysqli($serveur, $utilisateur, $motDePasse, $ma_base_de_donnees); // Définition de la fonction de rappel function import_data($stream, $row, $eof) { // Lire la ligne du fichier $line = $stream->readLine(); // Divisez la ligne en champs $fields = explode(";", $line); // Importer les données dans la base de données $query = "INSERT INTO perso (id, nom, prenom, email, age) VALUES ($fields[0], '$fields[1]', '$fields[2]', '$fields[3]', $fields[4])"; $db->query($query); // Retourner true pour importer la ligne return true; } // Importer les données $db->set_local_infile_handler('import_data'); $query = "LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE perso"; $db->query($query); ?>
Dans ce cas, nous allons utiliser la fonction set_local_infile_handler() pour vérifier la validité des données avant de les importer dans la base de données. Nous allons vérifier que les données contiennent au moins un nom et un âge.
Exemple : Copier le code
<?php // Connexion à la base de données $link = mysqli_connect($serveur, $utilisateur, $motDePasse, $ma_base_de_donnees); // Définition de la fonction de rappel function validate_data($stream, $row, $eof) { // Lire la ligne du fichier $line = $stream->readLine(); // Divisez la ligne en champs $fields = explode(";", $line); // Vérifier la validité des données if (empty($fields[1]) || empty($fields[4])) { return false; } // Retourner true pour importer la ligne return true; } // Importer les données set_local_infile_handler('validate_data'); $query = "LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE perso"; mysqli_query($link, $query); ?>
Exemple : Copier le code
<?php // Connexion à la base de données $db = new mysqli($serveur, $utilisateur, $motDePasse, $ma_base_de_donnees); // Définition de la fonction de rappel function validate_data($stream, $row, $eof) { // Lire la ligne du fichier $line = $stream->readLine(); // Divisez la ligne en champs $fields = explode(";", $line); // Vérifier la validité des données if (empty($fields[1]) || empty($fields[4])) { return false; } // Retourner true pour importer la ligne return true; } // Importer les données $db->set_local_infile_handler('validate_data'); $query = "LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE perso"; $db->query($query); ?>
Ces exemples illustrent comment utiliser set_local_infile_handler() dans les deux approches pour importer des données depuis un fichier texte dans une table MySQL en vérifiant la validité des données avant de les insérer.
Assurez-vous d'adapter le code en fonction de vos besoins spécifiques et de votre structure de base de données.
Pour plus de cas d'utilisation voir autres exemples