MySQL Driver [ Nenad Rakocevic / SOFTINNOV ] | |
akira | 14-Dec-2006/6:38:30+1:00 |
Hello En essayant de suivre la documentation fournie je tente de classer automatiquement mes rows après une requete sur la base de données mysql : Aussi j'aurais 2 questions de débutant ( qui galère mais qui s'accroche ) : # Comment passer une variable pour remplacer le nom de la table en dur ? # Comment tout récupérer [trié] dans une variable tableau ? Moi j'en suis là : sort foreach row read join mysql://root@localhost/mabase? "select * from " matable [print row] a+ | |
akira | 14-Dec-2006/6:56:07+1:00 |
Je viens juste de penser à GROUP BY de mysql Si ca se trouve ca peut marcher comme cela. ? | |
Philippe | 14-Dec-2006/7:03:51+1:00 |
Salut, Pense à lire la doc, cela évite de perdre du temps 1/ Tu y as des exemples : http://softinnov.org/rebol/mysql-usage.html#sect6.2. tables: [books movies cds games tmp] foreach table tables [ insert db ["Delete from ?" table] ] 2/ pour le classement, peut-être le faire déjà au niveau de ta requête SQL avec un " order by " ? (me rappelle plus si MySQL tolère cette syntaxe, je suis plutôt Oracle en ce moment). ===Philippe | |
akira | 14-Dec-2006/7:16+1:00 |
J'ai trouvé pour le tri il fallait bien le faire faire par mysql => c'est plus simple compte tenu de mon niveau actuel Mai j'ai pas résolu mon problème de variables dans la requête ... A + resultat: foreach row read join mysql://root@localhost/mabase? "select * from table order by id" [print row] | |
akira | 14-Dec-2006/7:23:23+1:00 |
Philippe on a posté quasi en même temps Merci pour ton aide | |
akira | 14-Dec-2006/8:10:31+1:00 |
Bon je cale... Je ne sais pas comment assigner une variable dans le coeur de la requete en 1 ligne. J'ai essayé plein de combinaisons ca ne passe pas. J'abandonne ( nuit blanche info => dodo maintenant ) En espèrerant que cet après midi j'aurais les idées claires je passerai sur le forum en première chose. a+ | |
coccinelle | 14-Dec-2006/12:06:07+1:00 |
Pour ta dernière question, voici une solution : sort foreach row read rejoin [ mysql://root@localhost/mabase? "select * from " matable][print row]Mais c'est une solution risquée (sql attack). Mieux vaut faire ainsi: db: open mysql://root@localhost/mabase insert db ["select * from ?" matable] foreach row copy db [print row] close db | |
Goldevil | 14-Dec-2006/16:55+1:00 |
Il est plus performant de fair le tri avec MySQL (order by) que le faire dans rebol. Quand tu as un query un peu compliqué à construire, tu peux simplement construire un string avec le query et après l'injecter à MySQL. myquery: rejoin [ "select * from " matable " where " moncritere " order by " montri] insert db reduce [ myquery ] ... | |
coccinelle | 14-Dec-2006/20:13:51+1:00 |
Faites attention au construction des requêtes avec join ou rejoin, vous courrez le risque d'intrusion SQL (SQL Intrusion). Par exemple, si l’utilisateur saisi dans un champs password la valeur : ' or '' = 'et que le code fait un rejoin [{select * from user where pseudo='} pseudo {' and pass='} pass {'}]le résulat obtenu est select * from user where pseudo='nickname' and pass='' or '' = '' Ce résultat est une requête qui va aboutir même si l’utilisateur ne connait pas le mot de passe. Si vous êtes sensibles au problème, vous trouverez une foultitude d'information sur le net en faisant une recherche sur SQL Intrusion dans votre moteur de recherche préféré. Ce genre de problème est résolu en utilisant des requêtes avec remplacement de paramètres. Exemple : insert db [{SELECT * FROM user WHERE pseudo = ? AND pass = ?} pseudo pass]Le protocole MySQL traite correctement ce genre de requêtes sans risque d’attaque par SQL Injection. | |
akira | 15-Dec-2006/2:13:17+1:00 |
Youpiiiii ca fonctionne Tant pis pour SQL intrusion. Mon appli fonctionnera en local uniquement. Grace à vos conseils j'en suis venu à bout Merci à tous ... myquery: rejoin [ "select id from table where nom='" nom ] resultat: read join mysql://root@localhost/db? myquery | |
akira | 15-Dec-2006/2:16:56+1:00 |
Et mince rectification :myquery: rejoin [ "select id from table where nom='" nom "'" ] resultat: read join mysql://root@localhost/db? myquery C'est mieux comme ca | |
akira | 15-Dec-2006/2:52:14+1:00 |
Je sais pas comment lui dire si resultat est vide alors print vide si resultat different vide alors print ok PHP if ( $resultat != "" ) { echo "ok"; // traitement } else echo "ERREUR"; Je cherche encore ... | |
akira | 15-Dec-2006/3:11:02+1:00 |
Avec rebol dans la requete sql 1 line ( j'adore ) Meme si la requete renvoie du vide elle revoie une chaine PAS VIDE Quand je fais ceci juste après la requete volontairement faussée print head? résultat Benh j'ai le droit à un joli TRUE | |
coccinelle | 15-Dec-2006/7:37:07+1:00 |
Tu devrais regarder l'aide de head?, tape help head? dans la console. En fait, ce n'est pas la bonne instruction, utilise head sans le ? et tu devrais avoir quelque chose de meilleur. | |
coccinelle | 15-Dec-2006/7:54:18+1:00 |
En jetant un cou d'oeil sur le protocol de nenad, je me dis que tu dois pouvoir faire ceci pour utiliser le read tout en évitant les intrusions : myquery: [ "select id from table where nom=?" nom ] resultat: read join mysql://root@localhost/db? remold myquery either empty? resultat [ print "Resultat vide" ][ print resultat ]et si tu veux le tout en une seul ligne : either empty? resultat: read join mysql://root@localhost/db? remold [ "select id from table where nom=?" nom ][ print "Resultat vide" ][ print resultat ] | |
akira | 15-Dec-2006/15:51+1:00 |
Oki c bon ca fonctionne nickel. Merci a tous de votre aide. J'en ai profité pour renommer EITHER par ifNot Juste pour essayer ifNot: :either Maintenant j'ai besoin de vous pour PARSE mais j'ouvre un autre trhead a+ | |
Login required to Post. |