Communauté Eggdrop
[mysqltcl] Erreur d'insert - Version imprimable

+- Communauté Eggdrop (https://forum.eggdrop.fr)
+-- Forum : Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum : Un peu plus loin (https://forum.eggdrop.fr/forumdisplay.php?fid=16)
+--- Sujet : [mysqltcl] Erreur d'insert (/showthread.php?tid=1281)



[mysqltcl] Erreur d'insert - Ahinu - 06/12/2012

Bonjour à tous,

Encore une énigme pour ma part, toujours sur le mysqltcl via Eggdrop
Cette fois-ci, mon soucis vient d'un d'une requête:
- création dans la table

Explications:
J'ai une commande .xtopic (elle me permet crée le topic via l' eggdrop et ainsi l'ajouté à la table topic SQL)

Or, si jamais dans mon [lrange $arg 1 end] (puisque mon chan = [string tolower [lindex $arg 0]]) il y a le caractère: ' (apostrophe) il refuse toute action sur la commande et me demande de me reporté à ma doc mySQL

Code :
bind dcc - xtopic dcc:xtopic
proc dcc:xtopic {hand idx arg} {
if {[matchattr $hand n] || [matchattr $hand A]} {
set chan [string tolower [lindex $arg 0]]
set topic  [lrange $arg 1 end]
if {$chan=="" || ![string match #* $chan] || $topic==""} { putddc $idx "\2.xtopic\2 <#channel> <topic text>"; return 0 }
if [isvalidchan $chan] {
service:connect
mysqlsel $::mysqlink "INSERT INTO topic (chan, topic, auteur) VALUES ('$chan', '[join $topic]', '$hand')"
service:deconnect
putlog "#\2$hand\2# .xtopic ~> \($chan\) [join $topic]"
} else { putdcc $idx "\2Error\2 le salon déclaré n'existe pas"; return 0 }
} else { avertdcc $hand }
}
 

Merci de toute réponse que vous allez faire ainsi que votre lecture


RE: [mysqltcl] INSERT INTO (Error char ' ) - aliasangelius - 06/12/2012

Yep simon,

Je connais pas trop le mysql mais de mémoire tu fait un apostrophe au début et tu le ferme qu'a la fin il me semble si je ne dit pas de conneries..
Mais je pense que j'ai tord


RE: [mysqltcl] INSERT INTO (Error char ' ) - Ahinu - 06/12/2012

C'est pas sa le soucis Fred,
C'est si jamais j'utilise le char ' (apostrophe) dans l'insert INTO sa me sort une erreur,
Exemple:

.xtopic #test Bonjour pour de l'aide -> #Aide

Et la le Eggdrop me dis poliment d'aller me faire foutre puisque il ne comprends pas 'aide
En gros il prends 'aide pour une colone de la table topic

Et je cherche quelques par si il y a une solution


RE: [mysqltcl] INSERT INTO (Error char ' ) - CrazyCat - 06/12/2012

Ce qui est normal, c'est du MySQL. Il faut protéger les apostrophes.
Donc:
tcl
set topic [join [lrange $arg 1 end]]
regsub -all -- \\\' $topic \\\\\' topic





RE: [mysqltcl] INSERT INTO (Error char ' ) - Ahinu - 06/12/2012

Encore un grand merci à toi Crazy !


RE: [mysqltcl] INSERT INTO (Error char ' ) - ZarTek - 10/07/2013

Bien que la solution de CrazyCat est totalement fonctionnel...

Je suggère la fonction ::mysql::escape proposer par mysqltcl qui le fait est qui est plus rapide:

Citation :::mysql::escape ?handle? string
Returns the content of string, with all special characters escaped, so that it is suitable for use in an SQL statement. This is simpler (faster) than using a general regexp or string map. If handle is specified C-API function mysql_real_escape_string is used. This is the recommended usage because in this case current character set is respected.

source site officiel : http://www.xdobry.de/mysqltcl/mysqltcl.html#22


RE: [mysqltcl] INSERT INTO (Error char ' ) - CrazyCat - 10/07/2013

Bien vu, je mettrai à jour le wiki dès que possible.


RE: [mysqltcl] INSERT INTO (Error char ' ) - ZarTek - 12/09/2013

(10/07/2013, 11:23)CrazyCat a écrit : Bien vu, je mettrai à jour le wiki dès que possible.

Je me suis permis de le faire. J’espère l'avoir fais correctement.

http://wiki.eggdrop.fr/Mysqlescape


EDIT (hors topic) :
On rajouterai pas ::mysql::insertid ?
Je vois souvent dans des codes un Insert, suivis d'un select pour prendre le ID, suivis -par fois- d'un Update/Insert ID.


RE: [mysqltcl] INSERT INTO (Error char ' ) - CrazyCat - 12/09/2013

Nickel pour la page Mysqlescape, j'ai juste déplacé le lien vers la page officielle dans le chapitre "voir aussi".
Tu peux ajouter le insertid, ça ne me pose aucun souci, bien au contraire.