Ci-dessous un script PHP permettant d’importer dans une base les données d’un fichier « export.sql ». Cela permet de créer les tables et d’insérer les données dans la base directement en PHP sans passer par l’import du fichier via le PhpMyAdmin
Ça peut être utile par exemple dans un « installeur » de site, dans la même idée de l’article précédent qui permettait de Créer une fichier de configuration en PHP
//effectuer la connexion à la base de données
$mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
//fichier contenant le sql
$lines = 'export.sql';
//initialisation des variables
$req = "";
$finRequete = false;
//pour chaque ligne du fichier
foreach ($lines as $line) {
//on saute les commentaires
if (substr($line, 0, 2) == '--' || $line == '') {
continue;
}
//on ajoute la ligne à la requête
$req .= $line;
//Permet de repérer quand il faut envoyer l'ordre SQL...
if (substr(trim($line), -1, 1) == ';') {
$finRequete = true;
}
//si requête terminé, on l'exécute et on recommence le traitement à partir de la ligne suivante
if ($finRequete) {
if (!$mysqli->query($req)) {
echo "<div class='alert alert-danger'>Erreur : " . $mysqli->error . "<br>" . $req . "</div>";
}
$req = "";
$finRequete = false;
}
}
$mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
//fichier contenant le sql
$lines = 'export.sql';
//initialisation des variables
$req = "";
$finRequete = false;
//pour chaque ligne du fichier
foreach ($lines as $line) {
//on saute les commentaires
if (substr($line, 0, 2) == '--' || $line == '') {
continue;
}
//on ajoute la ligne à la requête
$req .= $line;
//Permet de repérer quand il faut envoyer l'ordre SQL...
if (substr(trim($line), -1, 1) == ';') {
$finRequete = true;
}
//si requête terminé, on l'exécute et on recommence le traitement à partir de la ligne suivante
if ($finRequete) {
if (!$mysqli->query($req)) {
echo "<div class='alert alert-danger'>Erreur : " . $mysqli->error . "<br>" . $req . "</div>";
}
$req = "";
$finRequete = false;
}
}
Bonjour
J’ai réussi à importer ma BDD sql à partir d’un fichier grâce à votre code (merci) mais j’ai dû modifier une ligne pour ça.
Vous mettez : $lines = ‘export.sql’;
avec un foreach derrière (qui plante, forcément, puisque export.sql n’est pas un tableau).
Pour que ça fonctionne, il faut mettre : $lines = explode(« \n »,file_get_contents(« export.sql »));
Bonne journée