Page 1 sur 1
Exécuter un fichier .sql avec PHP
Posté : 19 oct. 2007, 11:39
par reem
Bonjour,
J'ai réussi à créer un fichier .sql qui contient ma base de données grâce à l'aide des membres de ce forum, je les en remercie beaucoup. Maintenant, quand j'ai voulu l'exécuter ça me donne une erreur de syntaxe
Code : Tout sélectionner
$requete = file_get_contents("copie_bdd.sql");
mysql_query($requete)or die(mysql_error());
Voici l'erreur:
Erreur de syntaxe près de '; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESUL' à la ligne 7
Je ne sais pas quoi faire, c'est un fichier généré par mysqldump donc j'ai pensé qu'il peut être exécuté directement dans "mysql_query()"
Si c'est la mauvaise méthode, comment faire pour exécuter ce fichier .sql ?
Je travaille avec EasyPHP 1.8
Merci beaucoup
Posté : 19 oct. 2007, 11:54
par Tracker
Salut,
mysql_query(...) est prévu pour n'éxécuter qu'un seul ordre. Donc il te faudra encore une fois passer par un exec(...) du prompt de mysql avec en paramêtre le fichier de sauvegarde .sql
Tracker.
Posté : 19 oct. 2007, 11:57
par reem
comment je fais avec "exec()" ?
car quand je fais "exec(" copie_bdd.sql ");" il me l'ouvre comme un fichier texte

Posté : 19 oct. 2007, 11:57
par Hubert Roksor
Le problème c'est que mysql_query() n'exécute qu'une seule requête à la fois, et échoue au premier point-virgule utilisé pour séparer les requêtes. Si tu es sous PHP5 et que ton fichier .sql n'est pas trop gros tu peux essayer mysqli_multi_query(), sinon le plus simple serait de passer par phpMyAdmin ou mieux encore, en ligne de commande avec mysql.
Pour la ligne de commande, ça devrait ressembler à
menu Démarrer -> Exécuter -> cmd
puis
Code : Tout sélectionner
mysql -uroot -pmotdepasse -Dbase "c:\chemin\fichier\backup.sql"
Posté : 19 oct. 2007, 12:02
par reem
J'ai PHP 4.3.10 et la fonction mysqli_multi_query() n'est pas défini je viens de l'essayer.
Le problème c'est qu'il faut que je le fasse avec PHP et non pas dans PhpMyAdmin
Posté : 19 oct. 2007, 12:29
par Berzemus
ben charge le contenu sql de ton fichier dans une variable, fait un explode dessus, et puis un foreach pour exécuter une à une les requêtes, enfin, il me semble..
$sql = file_get_contents("le fichier sql");
$sql_array = explode (";",$sql);
foreach ($sql_array as $val) {
mysql_query($val);
}
Posté : 19 oct. 2007, 13:02
par reem
très bien, avec ça les requêtes sont bien découpées, mais la base de données n'est pas créée.
On me dit "Aucune base n'a été sélectionnée"
Ce fichier SQL contient les requêtes qu'il faut pour recréer une base de données donc les insertions doivent se faire sur cette base de données récemment créée pourquoi faut-il sélectionner une bdd ?
Posté : 19 oct. 2007, 13:35
par reem
j'ai fini par créer la base de données avec une requête à part, puis exécuter le fichier .sql pour la remplir.
Tout marche très bien jusqu'au premier accent ! J'ai mis dans ma bdd 'Féminin' avec é au lieu de 'é' pour ne pas avoir le problème d'affichage des accents, et maintenant le ";" qui est dans 'Féminin' gène le bon découpage des requêtes

Posté : 19 oct. 2007, 13:49
par Berzemus
ah oui..
dans ton ficher sql, qu'est-ce qu'il y a entre chaque requête, mis à part le point virgule ?
SI c'est un espace, il suffit de mettre
explode("; ",$sql)
Pour une nouvelle ligne, ce serait
explode(";\n",$sql)
(\r\n ou \r, faut voir)
Enfin, des trucs comme ça quoi..
Posté : 19 oct. 2007, 14:33
par reem
youpiiiiiiiiiiiiiiiiiiiii ça marche très très très bien avec :
explode(";\r",$sql);
Merci infiniment pour votre aide

Posté : 19 oct. 2007, 15:25
par Truc
Modération :
reem, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton
en haut à gauche de ce sujet.
Re: Exécuter un fichier .sql avec PHP
Posté : 04 mai 2012, 10:42
par Oneill_
Merci Beaucoup pour ce petit bout de code qui vient de me sauver la vie !!
Re: Exécuter un fichier .sql avec PHP
Posté : 27 nov. 2013, 14:30
par theo
merci merci merci