fjusk1 Skrevet 15. mars 2015 Del Skrevet 15. mars 2015 (endret) Hei Har problemer med charset når jeg setter inn i db fra shellscript. Har søkt en del på nettet, og finner mange svar når det skal gjøres fra php, men ikke fra shellscript. Her er scriptet: Kode #!/bin/bash SQL_HOST=localhostSQL_USER=rootSQL_PASSWORD=1234SQL_DATABASE=smsdSQL_TABLE=sms_log#Set some SQL parametersif [ "$SQL_PASSWORD" != "" ]; thenSQL_ARGS="-p$SQL_PASSWORD";elseSQL_ARGS="";fiSQL_ARGS="-h $SQL_HOST -u $SQL_USER $SQL_ARGS -D $SQL_DATABASE -s -e"mysql $SQL_ARGS "SET NAMES utf8;"#Insert a new entry into the SQL tableif [ "$1" = "FAILED" ] || [ "$1" = "SENT" ]; thenmysql $SQL_ARGS "insert into $SQL_TABLE (type,sent,sender,receiver,msgid,text) values (\"$1\",\"$DATE\",\"$FROM\",\"$TO\",\"$3\",\"$TEXTSQLS\");";elif [ "$1" = "RECEIVED" ]; thenmysql $SQL_ARGS "insert into $SQL_TABLE (type,sent,received,sender,receiver,kodeord,text) values (\"RECEIVED\",\"$SENT\",\"$DATE\",\"$FROM\",\"$SUBJECT\",\"$KODEORD\",\"$TEXTSQLR\");";elif [ "$1" = "REPORT" ]; then#Extract more data from the status report fileDISCHARGE=`sed -e 1,/SMS\ STATUS/d < $2 | formail -zx Discharge_timestamp:`MSGID=`sed -e 1,/SMS\ STATUS/d < $2 | formail -zx Message_id:`STATUS=`sed -e 1,/SMS\ STATUS/d < $2 | formail -zx Status: | cut -f1 -d,`if [ "$MSGID" != "" ]; thenID=`mysql $SQL_ARGS "select id from $SQL_TABLE where receiver=\"$FROM\" and type=\"SENT\" and msgid=\"$MSGID\" order by id desc limit 1;"`mysql $SQL_ARGS "update $SQL_TABLE set received=\"$DISCHARGE\",status=\"$STATUS\" where id=\"$ID\";"fi Når jeg legger manuellt inn i db, så kommer det inn med æ, ø og å. Men når det kommer inn via shellscriptet så fungerer ikke æ,ø og å. Så vidt jeg har skjønt så må du sette charset pr connection i MySQL, men er usikker på hvordan dette kan gjøres fra scriptet. Noen ideer? Endret 15. mars 2015 av fjusk1 Lenke til kommentar
terjeelde Skrevet 15. mars 2015 Del Skrevet 15. mars 2015 Dette er litt komplisert, siden det er så mange forskjellige steder charsets spiller inn, ikke bare koblingen mot mysql. Hvilke charset er ting opprinnelig i? MySQL-session har eget charset. Data hentet fra MySQL-session har eget charset. osv. Det er også to store sikkerhetsutfordringer med å gjøre disse tingene på måten du skisserer. Passord til MySQL er i environment-variabel, som i mange tilfeller kan sees av andre brukere. På den måten kan de koble seg til databasen som brukeren, og gjøre ugang. I tillegg er det risiko rundt SQL-injection. Hvis $SUBJECT settes til "); DROP TABLE sms_log;" f.eks, så kan det slå ganske uheldig ut. Hadde jeg vært i dine sko, så ville jeg lagt selve SQL-delen inn i et annet script, i favorittspråket ditt (jeg ville brukt python, ruby og php burde fungere like fint), og så heller brukt det scriptet i shellscriptet, om du ønsker å kunne bruke det i shellscripts. På den måten kan du få skikkelig input-validation, du kan skrive til databasen på en trygg måte, du trenger ikke passord i environment-variabel, og samtidig får du løsning rundt charsets gratis med på kjøpet. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå