oujood.com

Comment utiliser set_local_infile_handler() en PHP pour importer des données

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.

set_local_infile_handler() : une fonction puissante pour importer des données en PHP

PHP Version: 5+

Définition et utilisation

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.

Paramètres

  • handler : la fonction de rappel à définir. Cette fonction doit être de type callable et doit prendre trois paramètres :
    • stream : le flux d'entrée contenant les données à importer.
    • row : le numéro de ligne courante.
    • eof : un drapeau indiquant si la fin du fichier est atteinte.
  • handle : un identifiant facultatif pour la fonction de rappel. Cet identifiant peut être utilisé pour supprimer la fonction de rappel ultérieurement à l'aide de la fonction unset_local_infile_handler().

Syntaxes orientées objet et procédurales

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]);

Valeurs possibles et paramètres

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.

Exemples pratiques

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;
}
?>

Cas d'utilisation de set_local_infile_handler()

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);

Cas 1 : Importer des données d'un fichier texte

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

Approche procédurale

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);
?>

Approche orientée objet

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);
?>

Cas 2 : Vérifier la validité des données avant l'importation

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.

Approche procédurale

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);
?>

Approche orientée objet

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.

Astuces et conseils d'utilisation pratique

  • La fonction set_local_infile_handler() est utile pour importer des données à partir de fichiers texte ou binaires.
  • Il est important de vérifier la validité des données importées avant de les insérer dans la base de données.
  • La fonction set_local_infile_handler() peut être utilisée pour importer des données depuis des sources externes, telles que des API ou des services Web.

Pour plus de cas d'utilisation voir autres exemples




Voir aussi nos tutoriel :

fonction sprintf, sprintf

Retourne une chaîne format e

L'Attribut dropzone

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

XSLT transformation

XSLT transformation