|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éclairé
![]() Inscription : février 2009 Messages : 318 ![]() |
Bonjours, j'ai un problème étrange...
Voilà, j'ai un système de module dans mon appli php. Quand j'ajoute un module, j'exécute un fichier contenant les tables sql à créer. Les tables sans clés étrangères ne pause pas de problème, mais vous l'aurez deviné, c'est pas le cas avec. Pourtant dans phpMyAdmin, tout ce passe nickel , avec ou sans clés. voici les tables et la commande: Code :
Code :
$this->exec(file_get_contents('component/text/install.txt')); |
||
|
|
00
|
|
|
#2 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Que fait cette méthode exec au juste ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
10
|
|
|
#3 |
|
Membre éclairé
![]() Inscription : février 2009 Messages : 318 ![]() |
salut Benjamin Delespierre!
La méthode exec est juste une méthode délégué d'un objet PDO. Je me demande si il ne faudrait pas créer les tables une part une, et non toute d'un coup ....? |
|
|
00
|
|
|
#4 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Par défaut, PHP t'empêche d'exécuter plusieurs requêtes d'un seul coup.
Ce que tu peux faire, c'est surcharger cette méthode pour qu'elle découpe la requête selon le séparateur ; et exécute tous les morceaux les uns après les autres mais c'est terriblement dangereux. Sois sûr de ce que tu fais. Si tu dispose des transaction (table InnoDB) alors cette opération est en revanche pratiquement sans risque car tu pourras toujours revenir en arrière.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
10
|
|
|
#5 |
|
Membre éclairé
![]() Inscription : février 2009 Messages : 318 ![]() |
Ok merci beaucoup Benjamin Delespierre, j'étais sur la bonne voix
Mais ça me laisse perplexe, sans clés étrangère, et en MYISAM, tout était exécuté. Cela voudrais dire que sans transaction possible, php effectuer la requête, et que avec, il refuse. Ça devrait logiquement être le contraire non? Enfin merci beaucoup ! a++ |
|
|
00
|
|
|
#6 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Tu as réussi à faire passer un exec multi-requêtes avec PDO ??
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
10
|
|
|
#7 |
|
Membre éclairé
![]() Inscription : février 2009 Messages : 318 ![]() |
ouais ça a marché sans problème.... vais re-tester pour être sur.
|
|
|
00
|
|
|
#8 | ||
|
Membre éclairé
![]() Inscription : février 2009 Messages : 318 ![]() |
Donc ouais c'est comfirmé.
J'étais meme pas en myisam, mais en innoDB. voilà le fichier exécute. Code :
|
||
|
|
00
|
|
|
#9 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Ah bah écoute je viens d'apprendre un truc là... J'ai testé avec PDO::exec et PDO::query et ça passe sans problème...
Donc ton problème initial venait pas de là. C'est peut être la contrainte sur la table panel qui pose problème, vérifie que cette table existe dans la DB dans laquelle tu mets ces tables.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
10
|
|
|
#10 | |
|
Membre éclairé
![]() Inscription : février 2009 Messages : 318 ![]() |
ba en fait y'a aucun problème sur mes tables, elle passe via phpmyadmin.
En plus ça ne marche pas quand j'exporte les tables depuis phpmyadmin, vers mon fichier à éxécuter ....sauf si j'enlève les contraintes Sinon ca passe bien en découpant les requêtes. Citation:
!!Bizarre !! vous avez dit bizarre |
|
|
|
00
|
|
|
#11 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
PDO::query ne sert pas qu'a faire des séléctions
Et si tu nous donnait le code d'erreur ça ferait avancer le train: http://php.net/manual/en/pdo.errorinfo.php
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
10
|
|
|
#12 | ||
|
Membre éclairé
![]() Inscription : février 2009 Messages : 318 ![]() |
Ok! le méssage d'érreur est le suivant :
Citation:
(errno: 150) -> problème de clés étrangère.... Ca m'aide pas trop tout ca. Citation:
|
||
|
|
00
|
|
|
#13 | |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Aïe l'erreur 150 c'est pas la joie. Elle se produit quand la clé étrangère n'est pas exactement (au poil de cul) identique à la colonne de la table visée.
A voir sur MySQL: Citation:
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
|
10
|
|
|
#14 | |
|
Membre éclairé
![]() Inscription : février 2009 Messages : 318 ![]() |
Bien, je sais pas d'ou peux venir le problème....
Comme je l'ai dit, ça passe dans phpmyadmin, et lorsque je découpe les tables, donc exit les problèmes de clés étrangère. Je trouverais ça bizarre que ça vienne de PDO, mais si ça viens pas de PDO , comment expliquer que ça marche dans phpmyadmin, ou la console mysql? Faudrait essayer, via les fonctions mysql_ , et non via pdo. Sinon j'ai pas tout bien compris le pavé sur l’erreur 150, enfin surtout le début. Citation:
En tout cas merci pour ton aide, et du temps consacré
|
|
|
|
00
|
|
|
#15 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
La doc de PDO::exec() dit que ça exécute une requête SQL, elle ne dit pas qu'on peut en mettre plusieurs.
Par ailleurs la doc de mysql_query dit explicitement que les requêtes multiples ne sont pas supportées. Il faut découper le bloc SQL en requêtes distinctes, c'est certainement ça que doit faire phpmyadmin. |
|
|
00
|
|
|
#16 | |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Citation:
PHPMyAdmin procède au découpage effectivement.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
|
00
|
|
|
#17 | |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Citation:
En passant 65536 dans le dernier argument (client_flags) de mysql_connect,ça fait que mysql_query a le même comportement que PDO::exec au niveau des instructions multiples. Ces méthodes ne sont pas vraiment en cause, elles ne font que passer le contenu au serveur mysql sans regarder ce qu'il y a dedans. Le problème est que comme le montre l'exemple de kimjoa, l'usage des requêtes multiples peut très bien provoquer une erreur mysql complètement imprévisible sur des requêtes par ailleurs tout à fait valides individuellement. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com