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

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

Marsh Posté le 23-05-2006 à 23:33:02    

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.

Reply

Marsh Posté le 23-05-2006 à 23:33:02   

Reply

Marsh Posté le 24-05-2006 à 09:29:44    

???
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
Reply

Marsh Posté le 24-05-2006 à 10:01:45    

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

Reply

Marsh Posté le 24-05-2006 à 10:43:05    

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
Reply

Marsh Posté le 24-05-2006 à 11:24:34    

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
Reply

Marsh Posté le 24-05-2006 à 11:25:57    

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
Reply

Marsh Posté le 24-05-2006 à 11:39:29    

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


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 24-05-2006 à 11:40:36    

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é.

Reply

Marsh Posté le 24-05-2006 à 11:47:58    

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.

Reply

Marsh Posté le 24-05-2006 à 12:34:01    

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
Reply

Marsh Posté le 24-05-2006 à 12:34:01   

Reply

Marsh Posté le 24-05-2006 à 13:03:59    

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

Reply

Marsh Posté le 26-05-2006 à 21:15:47    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed