mysjkin Skrevet 17. juli 2009 Del Skrevet 17. juli 2009 (endret) Jeg har en database hvor jeg lagrer noe output fra et instrument. Jeg leser inn en binær datafil, parser hver post med unpack $f=unpack('Llinenum/Lpad1/dutc/dX/dY/dZ/H40gpsdata/H140pad2/H2044sumspec/H16h1/Slt1/H2044spec1/H16h2/Slt2/H2044spec2',$data); så har jeg stappet dette inn i en databasetabell hvor integers og reals blir lagret som det og binærstrengene blir lagret som blobs. Opprinnelig var dette skrevet med phps mysql_ kommandoer og jeg bygget opp denne sql-setningen for hver post: $sql0="insert into ${prefix}rawdata values(null, '$filename', $fileid, ${f['linenum']}, ${f['pad1']}, ${f['utc']}, ${f['X']}, ${f['Y']}, ${f['Z']}, 0x${f['gpsdata']}, 0x${f['pad2']}, 0x${f['sumspec']}, 0x${f['h1']}, ${f['lt1']}, 0x${f['spec1']}, 0x${f['h2']}, ${f['lt2']}, 0x${f['spec2']})"; alt fungerte fint. Så har jeg skrevet systemet om til å bruke pdo og lagde da et prepared statement for dette: $sql="insert into ${prefix}rawdata values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; $inserth=$dbh->prepare($sql); før loopen hvor jeg leser inn data og så en $varsrs=array(null, $filename, $fileid, $f['linenum'], $f['pad1'], $f['utc'], $f['X'], $f['Y'], $f['Z'], $f['gpsdata'], $f['pad2'], "0x${f['sumspec']}", $f['h1'], $f['lt1'], "0x${f['spec1']}", "0x${f['h2']}", $f['lt2'], "0x${f['spec2']}"); $inserth->execute($vars); for hver post. Dette fungerte imidlertid ikke. binærdataene ble på et eller annet vis mangled og kom ut som noe helt ugjenkjennelig ift hva jeg dyttet inn. Jeg har prøvd både å escape dataene som over "0x${f['sumspec']}" og å legge binærstrengene rett inn og stole på at pdo forstår hva som skjer og behandler ting riktig. (bare $f['sumspec'] etc. i arrayet) hvis jeg definerer sql-setningen som en streng og så kjører den med pdo::exec() fungerer det helt som det skal, så inntil videre gjør jeg det, men prepared statement har jo sine fordeler, spesielt nå jeg kan få opptil noen tusen inserts per fil... Noen andre som har vært borti dette problemet, fx ved lagring av bilder i en database? php v 5.2.8 pdo mysql versjon 5.0.51a (ja det har vel kommet noe nytt etter dette men har ikke fått somlet meg til å oppgradere...) edit: kodeboks fungerte ikke helt... edit2: Ved nærmere ettertanke er det jo logisk at det jeg har skrevet over ("0x${f['sumspec']}") ikke fungerer, da blir det vel lagret som en streng. Desto mer pussig at den andre tilnærmingen ikke fungerer... M. Endret 17. juli 2009 av mysjkin 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å