Newsgroup: it.comp.os.linux.sys
Titolo: Problema inserimento record INTO MySql...

Sto cercando disperatamente una quadra per poter inserire in un campo
testo in una tabella di MySQL del codice bash...
Il problema sta negli apostrofi nel senso che vengono interpretati
come chiusure/aperture della stringa, e nei ritorni a capo...
Io inserisco i dati in questa maniera:
mysql --user=user--pass=pass -D db_name -e "$SQL_STRING"
dove SQL_STRING è un qualcosa tipo:
SQL_STRING="INSERT INTO tabella (campo_testo) VALUES (\"$(cat
miofileconapostrofi_o_doppievirgolette)\");"
Quel che ho bisogno è di ottenere all' interno di quel campo
'campo_testo' una copia del file
"miofileconapostrofi_o_doppievirgolette" considerando appunto che
questi file saranno script e file di configurazione... tipo per
esempio robe simili...
#============
if [[ -e $VERSION_DIR/md5.sum ]]; then
        CHANGED=$(md5sum -c $VERSION_DIR/md5.sum 2>/dev/null | grep -v
": OK" | cut -d: -f1)
fi
#============
Ho già provato con  sed -e 's/"/\\"/g' ma non ho ancora trovato la
soluzione....
Mi sapete illuminare?


illuminaci tu prima: gli apostrofi sono nel nome del file e non nel suo 
contenuto?
-- 
echo onailimissaM | awk 'BEGIN { FS = "" }
{ for (i = NF; i >= 1; i-- )
   printf $i }'; echo


no sono nel suo contenuto...


senti non ho voglia di creare una tabelle di questo tipo, per fare la 
prova. Quindi chiedo a te:
mysql -e blabla "INSERT INTO tabella (campo_testo) VALUES < /mio/file"
funziona o � una sciocchezza?
Fammi sapere.


    printf $i }'; echo
mysql --user=user --pass=password -D dbname -e "INSERT INTO table
(text_field) VALUES < bash_script.sh"
^-_^ Sciocchezza ^_-^
-- ERROR: 1064 --


ah be se gli passo uno script certo.... devi farei in modo da passargli 
direttamente il file.
Pensavo volessi passare il contenuto di un file ad ogni INSERT.
Cio�, tu cos� gli passi il contenuto di pi� file insieme?
Allora ti fai il cat dei file in un file temporaneo, e poi gli passi quello.
E se devi fare un file per volta, farai:
for i in $files; do
mysql --user=user --pass=password -D dbname -e "INSERT INTO table 
(text_field) VALUES< $i"
done
Per� anche questo � da provare ^_^


 Però anche questo è da provare ^_^
E se devi passare non il file stesso, ma lo stdout di uno script bash,
allora va bene:
mysql ... < $(scriptone.sh)
Poi se scriptone.sh produce merda, mi sa che farai un colossale insert
di merda... il risultato è abbastanza impredicibile in questi termini.
-- 
Massimo Bacilieri AKA Crononauta


scusatemi ma forse non sono stato spiegato bene:-)
devo semplicemente mettere con un insert dentro ad un campo del DB il
contenuto di un bash script o di un file di cofigurazione... che
quindi può contenere all' interno ["o ']... come posso fare ad evitare
degli excape non previsti?
l' esempio con "bash_script.sh" intendevo proprio andare a popolare la
cella del contenuto del file, non dell' output dello script...

 cella del contenuto del file, non dell' output dello script...
si, ti stai esprimendo malissimo, perch� quello che ha scritto 
Crononauta � corretto :-)
Il tuo problema � con lo script in se o con l'inserimento del file 
risultante nella tabella del DB?
Se il problema � con l'inserimento del DB allora farai:
mysql ... < file.txt
Se il problema � con lo script in se, cambiamo allora cambiamo la 
discussione completamente. Facci vedere lo script e i problemi che 
riporta e non parliamo pi� di MySQL.
mammamia Alessandro... 5 messaggi per spiegare un problema: prima non si 
capisce se il problema � nel nome file o nel contenuto, poi non si 
capisce nemmeno dove � il problema :) Mo' spiegati meglio per�.


 excape non previsti?
#!/usr/bin/env php
<?php
 $db = $argv[1];
 $user = $argv[2];
 $pass = $argv[3];
 $table = $argv[4];
 $field = $argv[5];
 $file = $argv[6];
 
 $db = mysql_connect('localhost', $user, $pass);
 mysql_select_db($db);
 mysql_query("insert into " .$table. " (" . $field. ") values ('" . 
mysql_real_escape_string(file_get_contents($file)). "'");
?>
MCB (May Contain Bugs), YMMV.
Da completare con controlli di errore ed eventualmente con astrazione del 
DB (tramite PDO). Rischio SQL injection su $table e $field, usare in 
ambiente controllato. :P
Uso:
chmod u+rx inserisci.php
inserisci.php nomeDB user pass tabella campo nomefile.sh
Bye.

 - Mostra testo citato -
Hai ragione...ma avevo veramente pochi secondi per scrivere i messaggi
e per di più la facevo da uno smartphone..
Devo ottenere questo:
devo inserire dentro ad un campo TEXT un qualcosa che può essere:
CASO 1:
Ciao tutto bene?
CASO 2:
   #Commento
   var=valore
   if [[ $var -lt 5 ]]; then
    echo -e "Viva la frutta!"
   fi
CASO 3:
'Ogni tanto mi spego davvero male';
Il tutto per poi essere mostrato da una query di una pagina PHP
mantenedo gli apici singoli o doppi che siano e i ritorni a capo...
Lo script di per se fa già tutto quel che deve, nel senso che mi
popola correttamente i campi ma devo trovare la soluzione per inserire
in un field TEXT il contenuto di un file che può avere l' aspetto di
uno dei 3 casi che ho riportato...

uppino... ^-_^