Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1680 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP]Problême avec une requête mysql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP]Problême avec une requête mysql

n°1373675
samycookie
Posté le 23-05-2006 à 23:33:02  profilanswer
 

Bonjour à tous,
J'ai un problême avec ce bout de code là.
 

Code :
  1. require_once ('../class/CSql.php');
  2.   $so = new CSql();
  3.   $so->sql = "DROP DATABASE IF EXISTS $DB_NAME;";
  4.   $so->query();
  5.   $so->sql = "CREATE DATABASE $DB_NAME DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;";
  6.   $so->query();
  7.   $so->sql = "USE $DB_NAME;";
  8.   $so->query();
  9.   $so->sql = "source $PATH/sql/mysql.sql;";
  10.   $so->query();


Qui me donne cette erreur là =>

Citation :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'source C:/local/web/dossier/sql/mysql.sql' at line 1


Or le chemin jusqu'au script mysql.sql est correct, ainsi que le script lui même (juste des définition de tables). Dois-je en déduire que je ne peux pas faire des requêtes avec la commande "source"? Si non, y a t'il un autre moyen pour exécuter mon script?
 
Merci d'avance pour vos futures réponses.

mood
Publicité
Posté le 23-05-2006 à 23:33:02  profilanswer
 

n°1373766
Xav_
The only one...
Posté le 24-05-2006 à 09:29:44  profilanswer
 

???
il dit juste que t'a un problème de syntaxe dans ta requete...  
- ajoute des echo avant tes $so->query(); pour voir si les requetes sont bien formées.
- on voit pas la partie connexion à la BDD, c'est fait directement par le contructeur quand tu déclare ta classe Csql ???
- pour valider la syntaxe de tes requetes, essai déjà de les injecter directement via phpmyadmin par exemple, pour voir ce qu'il te dit...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1373803
mrbebert
Posté le 24-05-2006 à 10:01:45  profilanswer
 

Tu peux essayer sans les ";" à la fin des requêtes :??:

n°1373861
samycookie
Posté le 24-05-2006 à 10:43:05  profilanswer
 

Comme je suis pas très clair je vais simplifier les choses :  
 

Code :
  1. $dbLink = @mysql_connect ('localhost', 'root', 'admin');
  2.   if (!$dbLink) die ("Erreur : ".mysql_error());
  3.   mysql_select_db ('db_eae', $dbLink) or die ("Erreur : ".mysql_error());
  4.   mysql_query ('source C:\local\web\wwweae\sql\insert.sql') or die (mysql_error());


même erreur =>

Citation :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'source C:\local\web\wwweae\sql\insert.sql' at line 1


J'ai testé dans phpmyadmin, la requête ne marche pas (j'aurais dû le préciser), mais si je le fait directement dans mysql en ligne de commande, ca fonctionne très bien.
Donc je reformule ma question, pourquoi la commande 'source' refuse de fonctionner avec PHP? me serais-je tromper quelque part? Si c'est interdit, ya t'il une autre façon de faire pour exécuter un fichier script SQL via PHP?


Message édité par samycookie le 24-05-2006 à 10:51:00
n°1373915
Xav_
The only one...
Posté le 24-05-2006 à 11:24:34  profilanswer
 

Citation :

$dbLink = @mysql_connect ('localhost', 'root', 'admin');


 
pourquoi le "@", t'a un pb de connexion qui s'affiche quand tu le met pas ???


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1373920
Xav_
The only one...
Posté le 24-05-2006 à 11:25:57  profilanswer
 

et aussi, peux tu nous montrer le début de ton fichier "insert.sql" ?
 
et oui, ya bien un moyen de contourner, tu lis le contenu du fichier insert.sql pour reformer la requete dans une variable sous PHP.

Message cité 1 fois
Message édité par Xav_ le 24-05-2006 à 11:27:15

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1373943
sielfried
Posté le 24-05-2006 à 11:39:29  profilanswer
 

"source" n'est pas un mot-clé qu'on peut mettre dans une requête SQL.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1373946
samycookie
Posté le 24-05-2006 à 11:40:36  profilanswer
 

Xav_ a écrit :

et aussi, peux tu nous montrer le début de ton fichier "insert.sql" ?
 
et oui, ya bien un moyen de contourner, tu lis le contenu du fichier insert.sql pour reformer la requete dans une variable sous PHP.


Le problême n'est pas la connection et le fichier insert.sql est bon, juste des insert tout bête, qui passent très bien sous phpmyadmin.  :non:  
J'étais justement en train de faire ce que tu dit pour contourner le problême, bien que j'aurais préféré voir la commande "source" fonctionné.

n°1373955
samycookie
Posté le 24-05-2006 à 11:47:58  profilanswer
 

Code :
  1. function mysql_exec_script ($so, $script)
  2. {
  3.   if (file_exists($script))
  4.   {
  5.     $str_file = file_get_contents($script);
  6.     $req_sql = explode(';', $str_file);
  7.     $req_sql_size = count($req_sql) - 1;
  8.     for($i = 0 ; $i < $req_sql_size ; ++$i)
  9.     {
  10.       $so->sql = $req_sql[$i];
  11.       $so->query();
  12.     }
  13.     return true;
  14.   }
  15.   else return false;
  16. }


Bon, voila ca ca marche, je suis pas un pro du php, donc mon code vaut ce qu'il vaut :D  
Mais je suis toujours preneur si il y a une solution pour l'appel SQL de "source [fic]" dans PHP.
Merci tout de même pour toutes vos réponses.

n°1374019
Xav_
The only one...
Posté le 24-05-2006 à 12:34:01  profilanswer
 

ton code à l'air pas mal, à part que tu peux faire plusieurs INSERT avec une seul requete en SQL donc moi j'aurais fait une concaténation des lignes du fichier dans la boucle for, genre

Code :
  1. for($i = 0 ; $i < $req_sql_size ; ++$i)
  2. {
  3.      $so->sql .= $req_sql[$i];
  4. }


 et un seul  

Code :
  1. $so->query();

à la fin....
 
et tu te connecte à la BDD juste avant l'envoie de la requete unique, et tu te déconnecte juste après, comme ça au niveau sécurité c'est mieux ;)


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
mood
Publicité
Posté le 24-05-2006 à 12:34:01  profilanswer
 

n°1374040
samycookie
Posté le 24-05-2006 à 13:03:59  profilanswer
 

Merci bien, je vais essayer de mettre tout ca en place ;)

n°1375765
anthomicro
Posté le 26-05-2006 à 21:15:47  profilanswer
 

Salut,
 
T'as LOAD DATA INFILE si tu veux aussi ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP]Problême avec une requête mysql

 

Sujets relatifs
PHP est caractéres réservésprobleme pour site
probléme avec un menu déroulantSous requete dans Accees
Makefile: problème d"inclusion de librairie[javascript][Surement bete] Probleme avec symbole +
AWK: Probleme avec longueur des noms de fichiers de donnéespetit probléme de requete MySQL avec l'utilisation d'une variable PHP
Probléme avec une requête PHP/MySQLProblème requête MySql avec un ";" dedans (un peu de PHP aussi)
Plus de sujets relatifs à : [PHP]Problême avec une requête mysql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR