Debianizzati.Org | Forum | Blog | Guide | IRC
 
 
Forum Italiano Debian - Debianizzati.Org
Marzo 19, 2010, 04:34:47 am *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia: è disponibile il numero 3 dell’e-zine “Debianizzati”. La rivista è disponibile al sito: http://e-zine.debianizzati.org/
 
   Indice   Aiuto Ricerca Agenda Accedi Registrati  
Pagine: [1] 2   Vai giù
  Stampa  
Autore Discussione: Campi di una query in una variabile  (Letto 847 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
peppepegasus
Jr. Member
**

Karma: +0/-1
Scollegato Scollegato

Messaggi: 57


Mostra profilo E-mail
« inserita:: Giugno 24, 2009, 02:32:14 pm »

ciao,

ho riscontrato questo problema:  devo inserire in una query dei dati e nomi dei campi sono contenuti in una variabile, la mia query è:

inserito1=`mysql --user=${utente} -p${pwdd} ${databs} -Bse "INSERT INTO sodar_windprofile ( id, data, ora, altitude '${stringa1}' ) VALUES( id,'${data1}', '${ora1}', '${colonna1}' '${stringa2}' )"`;

la stringa1 contiene i nomi dei campi che vanno inseriti nel database, e stringa2 i relativi valori, purtroppo mi da errore di sintassi perchè i nomi dei campi di stringa1 se li ritrova tra singolo apice (') cosa che non piace a mysql ma necessari per passargli la variabile. Sto sviluppando in bash di debian. Qualcuno sa come ovviare a questo problema?
grazie.
ciao.
« Ultima modifica: Giugno 24, 2009, 02:46:44 pm da peppepegasus » Registrato
More+
Hero Member
*****

Karma: +24/-0
Scollegato Scollegato

Messaggi: 542


+ +


Mostra profilo E-mail
« Risposta #1 inserita:: Giugno 24, 2009, 02:59:54 pm »

ciao,

ho riscontrato questo problema:  devo inserire in una query dei dati e nomi dei campi sono contenuti in una variabile, la mia query è:

inserito1=`mysql --user=${utente} -p${pwdd} ${databs} -Bse "INSERT INTO sodar_windprofile ( id, data, ora, altitude '${stringa1}' ) VALUES( id,'${data1}', '${ora1}', '${colonna1}' '${stringa2}' )"`;

la stringa1 contiene i nomi dei campi che vanno inseriti nel database, e stringa2 i relativi valori, purtroppo mi da errore di sintassi perchè i nomi dei campi di stringa1 se li ritrova tra singolo apice (') cosa che non piace a mysql ma necessari per passargli la variabile. Sto sviluppando in bash di debian. Qualcuno sa come ovviare a questo problema?
grazie.
ciao.

brutalmente puoi sostituire il singolo apice con due singoli apici prima di darlo in pasto a mysql
Registrato
peppepegasus
Jr. Member
**

Karma: +0/-1
Scollegato Scollegato

Messaggi: 57


Mostra profilo E-mail
« Risposta #2 inserita:: Giugno 24, 2009, 03:10:19 pm »

ciao,

non mi è chiaro dove va fatta la sostituzione degli apici come dici visto che ce ne sono diversi  huh, ho fatto varie prove ma nessuna ha risolto il problema. Potresti postare la tua soluzione?
grazie.
Registrato
More+
Hero Member
*****

Karma: +24/-0
Scollegato Scollegato

Messaggi: 542


+ +


Mostra profilo E-mail
« Risposta #3 inserita:: Giugno 24, 2009, 03:28:30 pm »

ciao,

non mi è chiaro dove va fatta la sostituzione degli apici come dici visto che ce ne sono diversi  huh, ho fatto varie prove ma nessuna ha risolto il problema. Potresti postare la tua soluzione?
grazie.
Se non fosse per Bash ti posterei tranquillamente la soluzione
ma dato che non mi muovo bene con bash, provo spiegartelo
prima di comporre la Query devi sostituire tutti gli apici singoli all'interno di Stringa1 con due singoli apici.
Te lo scrivo in PHP, per chiarire il concetto
Codice:
stringa1=str_replace("'","''",stringa1)
in pratica cerco in stringa 1 i singoli apici '
e li sostituisco con due singoli apici  '' (attenzione, non sono le virgolette!)
poi componi la query
Citazione
inserito1=`mysql --user=${utente} -p${pwdd} ${databs} -Bse "INSERT INTO sodar_windprofile ( id, data, ora, altitude '${stringa1}' ) VALUES( id,'${data1}', '${ora1}', '${colonna1}' '${stringa2}' )"`;

in questo modo mysql digerisce la query, oppure anteponi ai singoli apici il blackslash
In PHP comunque uso, in modo più elegante, la funzione mysql_real_escape_string()
Codice:
mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.

More+

PS: ma sei sicuro che c'è solo quell'errore?
altitude '${stringa1}'
'${colonna1}' '${stringa2}'
non sono separati dalle virgole  huh . Prova a stampare a video la query risultante per verificare l'esatta sintassi.
Registrato
peppepegasus
Jr. Member
**

Karma: +0/-1
Scollegato Scollegato

Messaggi: 57


Mostra profilo E-mail
« Risposta #4 inserita:: Giugno 24, 2009, 10:45:18 pm »

Forse non mi sono spiegato bene..nella mia stringa1 non ci sono apici, gli apici che danno problemi sono quelli all'interno della query, cioè

INSERT INTO sodar_windprofile ( id, data, ora, altitude '${stringa1}' )

quelli che dovrebbero essere in grassetto. Senza quegli apici non passa la variabile e quindi sono indispensabili però essendo i nomi dei campi contenuti in stringa1 non li vuole tra apici.
No non ci sono altri errori, il fatto che siano attaccati è che c'è già lo spazio incluso all'interno di stringa1. Infatti se mi fermo ad altitude va tutto bene, è lì il problema allora!
grazie..spero ora sia più chiaro e che mi possa dare una mano.
ciao..
« Ultima modifica: Giugno 24, 2009, 10:47:15 pm da peppepegasus » Registrato
More+
Hero Member
*****

Karma: +24/-0
Scollegato Scollegato

Messaggi: 542


+ +


Mostra profilo E-mail
« Risposta #5 inserita:: Giugno 25, 2009, 11:36:23 am »

Forse non mi sono spiegato bene..nella mia stringa1 non ci sono apici, gli apici che danno problemi sono quelli all'interno della query, cioè

INSERT INTO sodar_windprofile ( id, data, ora, altitude '${stringa1}' )

quelli che dovrebbero essere in grassetto. Senza quegli apici non passa la variabile e quindi sono indispensabili però essendo i nomi dei campi contenuti in stringa1 non li vuole tra apici.
No non ci sono altri errori, il fatto che siano attaccati è che c'è già lo spazio incluso all'interno di stringa1. Infatti se mi fermo ad altitude va tutto bene, è lì il problema allora!
grazie..spero ora sia più chiaro e che mi possa dare una mano.
ciao..
Ho capito che avevo interpretato male il discorso degli apici
ma ancora non capisco la tua necessità  huh
Ti posto parte di uno script bash  che avevo fatto:
Codice:
GIORNO=`date +%Y-%m-%d`
ORA=`date +%T`

mysql $DBname -u $USER --password=$PWD -h $HOST --execute="INSERT INTO tabella ( User, Giorno,Timbro, Ora ) VALUES ('$UTENTE', '$GIORNO', '$TIMBRO', '$ORA');"

Registrato
peppepegasus
Jr. Member
**

Karma: +0/-1
Scollegato Scollegato

Messaggi: 57


Mostra profilo E-mail
« Risposta #6 inserita:: Giugno 25, 2009, 11:45:07 am »

ciao,

allora approfitto del tuo esempio postato e ti spiego quale è il problema..nel tuo esempio i nomi dei campi User, Giorno etc che seguono nelle parentesi tonde la parola tabella ..sono definiti, non sono una variabile, i valori che inserisci sono una variabile

--execute="INSERT INTO tabella ( User, Giorno,Timbro, Ora )

il mio problema è che i nomi dei campi (nel tuo caso user, Giorno...) sono anche essi una variabile?! Sono cioè variabili sia i nomi dei campi che quelli dei valori. Ok?
grazie.
ciao.
Registrato
More+
Hero Member
*****

Karma: +24/-0
Scollegato Scollegato

Messaggi: 542


+ +


Mostra profilo E-mail
« Risposta #7 inserita:: Giugno 25, 2009, 12:24:58 pm »

ciao,

allora approfitto del tuo esempio postato e ti spiego quale è il problema..nel tuo esempio i nomi dei campi User, Giorno etc che seguono nelle parentesi tonde la parola tabella ..sono definiti, non sono una variabile, i valori che inserisci sono una variabile

--execute="INSERT INTO tabella ( User, Giorno,Timbro, Ora )

il mio problema è che i nomi dei campi (nel tuo caso user, Giorno...) sono anche essi una variabile?! Sono cioè variabili sia i nomi dei campi che quelli dei valori. Ok?
grazie.
ciao.

Chiaro   grin (perdonami)

Codice:

CAMPO="Giorno"
GIORNO=`date +%Y-%m-%d`
ORA=`date +%T`

SQL="INSERT INTO tabella ( User, $CAMPO ,Timbro, Ora ) VALUES ('$UTENTE', '$GIORNO', '$TIMBRO', '$ORA');"
mysql $DBname -u $USER --password=$PWD -h $HOST --execute="$SQL"
Ho provato questa mia variante e funziona ..mentre sul tuo codice ho ancora degli scrupoli per come lo hai scritto.

ciao
More+
Registrato
peppepegasus
Jr. Member
**

Karma: +0/-1
Scollegato Scollegato

Messaggi: 57


Mostra profilo E-mail
« Risposta #8 inserita:: Giugno 25, 2009, 12:59:49 pm »

Non ti preoccupare..allora ho usato una variante del tuo codice, ne ho fatto una versione ridotta, simile al tuo ma adattato al mio caso, ho fatto così:

CAMPO="speed"
GIORNO=`date +%Y-%m-%d`
ORA=`date +%T`
velocita=100

SQL="INSERT INTO sodar_windprofile ( id, data, ora, altitude, $campo ) VALUES (id, '${data1}', '${ora1}', '${colonna1}', ${velocita});"
mysql --user=${utente} -p${pwdd} ${databs} -Bse --execute="$SQL"


il problema è che non mi accade nulla nel Db non mi inserisce nulla. Mi sembra essere simile al tuo..c'è solo quel -Bse che se non c'è nel mio caso mi da errore. Boh..
grazie.
ciao.
Registrato
More+
Hero Member
*****

Karma: +24/-0
Scollegato Scollegato

Messaggi: 542


+ +


Mostra profilo E-mail
« Risposta #9 inserita:: Giugno 25, 2009, 01:55:39 pm »

Mi sembra essere simile al tuo..c'è solo quel -Bse che se non c'è nel mio caso mi da errore. Boh..
Beh le differenze sono molte di più.

Per le ozioni espresse come -Bse leggi il man mysql (mai usare le cose ciecamente)
il -e equilvale al mio --execute (è soltanto un'espressione ridotta)

inoltre tra il -p e la password non vedo alcuno spazio
ma non puoi scrivere l'istruzione in questo modo:

Codice:
mysql $databs -u $utente --password=$pwdd --execute="$SQL"
funziona, qualora non funzioni, verifica i dati di accesso che passi a mysql.

se lavori in localhost, comunque sarebbe meglio indicare sempre l'opzione -h
Registrato
peppepegasus
Jr. Member
**

Karma: +0/-1
Scollegato Scollegato

Messaggi: 57


Mostra profilo E-mail
« Risposta #10 inserita:: Giugno 25, 2009, 02:17:09 pm »

Allora ho modificato come mi hai detto, cioé

SQL="INSERT INTO sodar_windprofile ( id, data, ora, altitude$stringa1 ) VALUES (id, '${data1}', '${ora1}', '${colonna1}' '${stringa2}');"
mysql --user=${utente} -p${pwdd} ${databs} --execute="$SQL"


mi da però questo errore
ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1
che errore è? non trova i valori?
grazie.
ciao.
Registrato
More+
Hero Member
*****

Karma: +24/-0
Scollegato Scollegato

Messaggi: 542


+ +


Mostra profilo E-mail
« Risposta #11 inserita:: Giugno 25, 2009, 02:24:43 pm »

mi da però questo errore
ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1
che errore è? non trova i valori?
hai scritto 4 campi e inserito 5 valori!

PS: ma sei sicuro che c'è solo quell'errore?
altitude '${stringa1}'
'${colonna1}' '${stringa2}'
non sono separati dalle virgole  huh . Prova a stampare a video la query risultante per verificare l'esatta sintassi.

grin Te lo avevo detto!
« Ultima modifica: Giugno 25, 2009, 02:26:41 pm da More+ » Registrato
peppepegasus
Jr. Member
**

Karma: +0/-1
Scollegato Scollegato

Messaggi: 57


Mostra profilo E-mail
« Risposta #12 inserita:: Giugno 25, 2009, 02:43:26 pm »

è vero che non c'è la virgola ma questo perchè la stringa1 inizia con una virgola e non serve mettercene un'altra. Se metto le virgole, così:

SQL="INSERT INTO sodar_windprofile ( id, data, ora, altitude, $stringa1 ) VALUES (id, '${data1}', '${ora1}', '${colonna1}', '${stringa2}');"
mysql --user=${utente} -p${pwdd} ${databs} --execute="$SQL"


mi da questo errore ora

ERROR 1064 (42000) at line 1: 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 ' speed, direction, vertical_intensity, vertical_sn, vertical_velocity, variance_' at line 1


cioè di nuovo un errore di sintassi..sto impazzendooo!!! Lips Sealed
grazie per la pazienza.
ciao.

Registrato
More+
Hero Member
*****

Karma: +24/-0
Scollegato Scollegato

Messaggi: 542


+ +


Mostra profilo E-mail
« Risposta #13 inserita:: Giugno 25, 2009, 04:07:53 pm »

ma non sarebbe più semplice e comprensibile
 se finalmente mostrassi un chiaro esempio di cosa contengono quelle variabili
..vista l'insolito uso di inserire la virgola all'interno?
Registrato
peppepegasus
Jr. Member
**

Karma: +0/-1
Scollegato Scollegato

Messaggi: 57


Mostra profilo E-mail
« Risposta #14 inserita:: Giugno 26, 2009, 02:01:07 pm »

Beh non ho voluto scrivere tutto il processo dall'inizio per non confondere le idee..ma ora a grande richiesta  grin spiego dall'inizio.
Ho un file di testo di questo tipo:

Altitude (m), Speed (m/s), Direction (°), Vertical Intensity, Vertical S/N (%), Vertical Velocity (m/s), Variance of VV (m/s)

 20, 0.7, 130, 34419, 96, 0.03, 0.03

 34, 1.9, 160, 8170, 97, 0.14, 0.05

 49, 3.6, 154, 1450, 94, 0.08, 0.08

 63, 4.8, 156, 549, 94, 0.10, 0.07

 77, 5.9, 155, 233, 90, 0.07, 0.18

 91, 8.1, 149, 145, 88, -0.08, 0.26

 105, 8.2, 157, 91, 83, 0.14, 0.27

 119, , , 70, 81, 0.19, 0.23

 133, , , 56, 77, 0.24, 0.26

 148, , , 45, 74, 0.22, 0.44

 162, , , 37, 73, 0.22, 0.47

 176, , , 30, 69, 0.19, 0.36

 190, , , 25, 67, 0.16, 0.42

 204, , , 23, 65, 0.13, 0.68

 218, , , 22, 64, 0.20, 0.48

 232, , , 20, 62, 0.15, 0.80

 247, , , 18, 61, ,

 Wind profile from 31 Mar 09, 00:00:00 to 00:10:00

 20, 0.4, 136, 34174, 96, 0.10, 0.04

 34, 2.2, 152, 10082, 97, 0.16, 0.05

 49, 4.3, 144, 1594, 94, -0.01, 0.09

 63, 4.9, 150, 665, 94, 0.12, 0.11

 77, 6.6, 149, 286, 91, 0.11, 0.16

 91, 8.5, 146, 166, 89, 0.04, 0.22

 105, , , 95, 83, 0.16, 0.29


questo file lo devo leggere riga per riga  e prendere i valori delle varie grandezze e inserirle in un database. Quando sono presenti tutti i valori non ci sono problemi, quando invece il valore non c'è io voglio che nel database mette il NULL. Ho pensato in un primo tempo di creare una stringa variabile che contenesse solo i campi in cui ho dato. Con un if controllo la presenza del dato  e ins tringa1 faccio scrivere il campo (speed, direction etc) e nella stringa2 metto il relativo valore.
Un esempio di if è questo

Codice:
if [ "$colonna7" = "$var_vuota" ]
then
stringa1=$stringa1
stringa2=$stringa2
else
stringa1="$stringa1, $variance_of_vv"
stringa2="$stringa2, $colonna7"
fi

quindi alla fine devo scrivere nel db..e qui si ricollega al resto che ho detto.
spero di essere stato più chiaro.
ciao
Registrato
Pagine: [1] 2   Vai su
  Stampa  
 
Vai a:  

Altri Topic Correlati
Oggetto Aperta da Risposte Visite Ultimo messaggio
Dubbio su Bind e campi PTR ! Network Akyrius 10 956 Ultimo messaggio Agosto 29, 2005, 04:07:16 pm
da Akyrius
Output comando in variabile? Programmazione FabryProg 2 602 Ultimo messaggio Marzo 21, 2006, 09:38:53 pm
da FabryProg
problema MySQL query browser Installazione YtseDrummer 4 540 Ultimo messaggio Giugno 28, 2007, 11:59:02 am
da YtseDrummer
Errore ACPI EC non query interrupt.... Laptop Sunrise78 0 230 Ultimo messaggio Settembre 06, 2009, 04:21:29 pm
da Sunrise78
CPI: EC: non-query interrupt received, switching to interrupt mode Generale camaleonte 4 155 Ultimo messaggio Ottobre 21, 2009, 10:33:05 pm
da camaleonte
Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC XHTML 1.0 valido! CSS valido!
Pagina creata in 0.088 secondi con 23 interrogazioni al database.