Autore Topic: L'apostrofo in Mysql e Gambas  (Letto 9480 volte)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
L'apostrofo in Mysql e Gambas
« il: 25 Maggio 2009, 23:19:51 »
Buonasera a tutti,
ho un problema di inserimento dati in Mysql quando un campo contiene il carattere "apostrofo".
Faccio un piccolo esempio per spiegarmi meglio:
in un campo Indirizzo che contiene il dato "Via dell'Industria"
quando Gambas esegue l'INSERT leggendo il dato da una TextBox o qualsiasi altro oggetto che contenga una stringa come sopra, Mysql ritorna un errore di sintassi.

Come posso fare perchè Gambas formatti il dato con la sintassi corretta per l'inserimento in Mysql?

Avete incontrato lo stesso problema anche con altri DB?
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: L'apostrofo in Mysql e Gambas
« Risposta #1 il: 26 Maggio 2009, 07:06:54 »
lo stesso problema si presenta anche con sqlite

hai provato a inserire la parola mettendo un apostrofo all' inizio e uno alla fine?

esempio


'Via dell'Industria'

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: L'apostrofo in Mysql e Gambas
« Risposta #2 il: 26 Maggio 2009, 08:26:22 »
Dovete radoppiare l'apostrofo

Via dell''Industria

Io solitamente quando inserisco un record diciamo 'a rischio apostrofo' faccio un replace prima dell'inserimento

testo = Replace(Testo,"'","''")

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: L'apostrofo in Mysql e Gambas
« Risposta #3 il: 30 Maggio 2009, 16:35:12 »
A me non pare che lo faccia, però. Anch'io uso MySQL e gli apostrofi nei nomi e negli indirizzi sono all'ordine del giorno, ma non mi ha mai dato errore.
Mi pare strana, 'sta cosa. Forse fa parte delle impostazioni del server MySQL? Io uso la codifica UTF-8.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: L'apostrofo in Mysql e Gambas
« Risposta #4 il: 30 Maggio 2009, 17:23:09 »
Penso che l'apostofo nei conadi inerenti a *sql in gambas sia disabilitato per motivi di sicurezza....

La maggior parte degli sql injection, infatti, si basa proprio sullo strutturare la stringa inserita in una textbox in modo che commenti tutto ciò che viene dopo e siccome in gambs i commenti sono dati dall'apostrofo allora esso è disabilitato......(non mi dilungo sennò Leo mi denuncia per hacking...:-D e po non voglio essere motivo di vanto di lamers vari!!!)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: L'apostrofo in Mysql e Gambas
« Risposta #5 il: 30 Maggio 2009, 20:43:25 »
Ho provato ad inserire lo stesso tipo di dato anche escludendo Gambas, quindi direttamente su MySQL ma mi restituisce sempre l'errore, tolgo l'apostrofo o lo inserisco tra doppi apici è tutto e ok.

@leo72
Se a te non da errore molto probabilmente ho qualche impostazione diversa dal tuo, ma cosa?

Sarebbe altrimenti complicato (secondo me improponibile) dover controllare tutti i campi di tipo Text in un progetto Gambas specialmente se i campi sono una quantità importante.

Anche io uso la tua stessa codifica: UTF-8 Unicode
Versione MySQL 5.1.33
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: L'apostrofo in Mysql e Gambas
« Risposta #6 il: 30 Maggio 2009, 22:48:04 »
Uhm... però io non uso direttamente l'SQL quando inserisco dati con l'apostrofo.
Ho ricontrollato il codice e faccio interfacciare Gambas per cui non so se esegue un qualche tipo di conversione da codifica a codifica.

Tanto per intendersi:
Codice: [Seleziona]

Risultato["nome"] = txtNome.Text
Visita il mio sito personale: http://www.leonardomiliani.com

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: L'apostrofo in Mysql e Gambas
« Risposta #7 il: 31 Maggio 2009, 20:13:09 »
Scusa leo ma non ho capito l'esempio che hai postato.

Io normalmente per inserire dati in MySQL uso questa sintassi
Codice: [Seleziona]
("INSERT INTO anagrafica (indirizzo) VALUES ('" & TxtIndirizzo.Text & "')")
 
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: L'apostrofo in Mysql e Gambas
« Risposta #8 il: 01 Giugno 2009, 16:02:29 »
Come ti ho detto, non uso per inserire i dati l'SQL puro, quindi non eseguo query SQL. Mi affido ai metodi di Gambas.

L'esempio che ti ho postato fa parte di una porzione di codice più ampia. Restringendo diciamo che sarebbe così:

Codice: [Seleziona]

  Connessione.OPEN
  Risultato = Connessione.Create("anagrafica")
  Risultato["codice"] = codice
  Risultato["cognome"] = txtCognome.Text
  Risultato["nome"] = txtNome.Text
  Risultato.Update
  Connessione.Commit
  Connessione.Close
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: L'apostrofo in Mysql e Gambas
« Risposta #9 il: 01 Giugno 2009, 16:57:52 »
Citazione

leo72 ha scritto:
Uhm... però io non uso direttamente l'SQL quando inserisco dati con l'apostrofo.
Ho ricontrollato il codice e faccio interfacciare Gambas per cui non so se esegue un qualche tipo di conversione da codifica a codifica.

Tanto per intendersi:
Codice: [Seleziona]

Risultato["nome"] = txtNome.Text


Ed è per questo che non incontri errori...perchè ci pensa l'istruzione di gambas a rendere la parola con l'apostrofo una stringa accettata da SQL....Gli apostrofi in SQL devono essere filtrati per motivi di sicurezza...se così non fosse non sarebbe difficile entrare nel database senza credenziali, conoscere il nome del database o addirittura distruggerlo!

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: L'apostrofo in Mysql e Gambas
« Risposta #10 il: 02 Giugno 2009, 00:14:39 »
@ leo
Non conoscevo il metodo da te desritto, anche perchè tutti gli esempi che avevo trovato a suo tempo quando ho cominciato ad usare MySQL con Gambas erano descritti con esempi di SQL "puro" e così ho continuato.
Ho provato l'esempio che mi hai postato è funziona perfettamemte con dati apostrofati, quindi usero' questo sistema.

Ne aprofitto per chiederti alcuni chiarimenti, la sintassi è la stessa anche per
update e delete?
Se devo inserire dati di tipo data e valuta (due decimali) come li formato per inserirli con il metodo che mi hai postato?
Ti ringrazio per la risposta e per le eventuali spiegazioni.

@ Ceskho
Grazie per le ulteriori delucidazioni.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: L'apostrofo in Mysql e Gambas
« Risposta #11 il: 02 Giugno 2009, 06:08:38 »
@tornu:
Usa Risultato = Connessione.Edit("tabella") chiuso da una Connessione.Update per modificare; per cancellare basta dare il comando diretto Connessione.Delete(....).
Per aggirare il problema della conversione dei tipi data, valuta e numero, io uso sempre dati di tipo Text così che il DB immagazzini i valori come glieli passo io.

@Ceskho:
L'utilizzo dei metodi precompilati in Gambas toglie spesso molte castagne dal fuoco. Forse usare l'SQL nudo e crudo fa più "ganzo" ma io preferisco dormire sonni tranquilli ;-)
Visita il mio sito personale: http://www.leonardomiliani.com

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: L'apostrofo in Mysql e Gambas
« Risposta #12 il: 02 Giugno 2009, 19:32:28 »
Per prima cosa ti ringrazio per le spiegazioni che mi hanno aiutato a capire questo metodo di inserimento dati, anche se ancora non ho capito bene alcuni concetti di cui ho provato a cercare documentazione in giro ma come al solito con Gambas non è semplice.

Chiedo cortesemente non solo a te, (ma a chiunque sappia) se puoi dare risposta ai dubbi che mi sono rimasti.

Per la cancellazione, sono riuscito solo a cancellare un'intera tabella, ma se volessi cancellare un solo record oppure n record che soddisfano una condizione?

Il metodo che tu hai descritto sostituisce in toto l'SQL "puro" o devo usare un "misto" ? Per esempio: ricerca di record, aggregazione dati da più tabelle ecc.. cose che al momento io eseguo usando SELECT con tutte le sue opzioni e fattibile con i metodi di Gambas?
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: L'apostrofo in Mysql e Gambas
« Risposta #13 il: 03 Giugno 2009, 06:21:10 »
1)
Delete dato senza parametri cancella un'intera tabella:
Codice: [Seleziona]

Connection.Delete(NomeTabella)

Per la cancellazione di un solo record, devi mettere i parametri nel comando Connection.Delete(), né più né meno di come faresti per una ricerca o un'edit. Quindi, per cancellare il record il cui campo ID, ad esempio, fosse 1234, basta dare:
Codice: [Seleziona]

Connesione.Delete(NomeTabella, "ID = &1", ValoreID)

Se invece vuoi ad esempio cancellare tutti i nominativi che si chiamano Rossi, dai:
Codice: [Seleziona]

Connessione.Delete(NomeTabella, "cognome = &1", "Rossi")


In pratica, Delete esegue una query filtrando i risultati con i parametri immessi, come se eseguissi un WHERE in SQL puro.

2)
I metodi di gestione dei record in Gambas puoi usarli insieme a query SQL. Io faccio così, infatti, utilizzando i primi per normali lavori di aggiunta, editazione e cancellazione di singoli record, mentre utilizzo l'SQL puro quando devo fare ricerche avanzate nel DB. Non c'è nessuna regola per cui devi usare o l'uno o l'altro: gli strumenti di un linguaggio sono lì apposta per aiutarti a raggiungere il tuo scopo ;-)
Visita il mio sito personale: http://www.leonardomiliani.com

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: L'apostrofo in Mysql e Gambas
« Risposta #14 il: 04 Giugno 2009, 00:15:19 »
:ok:  :-D

Un'ultima cosa, NomeTabella va messo tra doppi apici.
Grazie
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)