Edorph Skrevet 13. november 2009 Del Skrevet 13. november 2009 Har et prepared PDO statement opprettet som følger: $stmt = $db->prepare('SELECT * FROM tbl WHERE id IN (?)'); Jeg ønsker å binde en vilkårlig lang kommaseparert liste med heltall til parameteren, men har sålangt ikke funnet ut hvordan det gjøres. Følgende fungerer (naturligvis) ikke: $stmt->bindValue(1, array(1,2,3)); $stmt->bindValue(1, '1,2,3'); Den første fordi bindValue ikke støtter arrays, og nummer to fordi parametern da blir en streng. Finnes det en elegant måte å gjøre dette på? Iflg. forumtrådene jeg har kommet over, så er det ikke mulig, og manualen er litt unnvikende på dette området. Tips? En omtrentlig tilsvarende problemstilling oppstår ved "..ORDER BY ?". Lenke til kommentar
Danjaco Skrevet 14. november 2009 Del Skrevet 14. november 2009 (endret) Har et prepared PDO statement opprettet som følger: $stmt = $db->prepare('SELECT * FROM tbl WHERE id IN (?)'); Jeg ønsker å binde en vilkårlig lang kommaseparert liste med heltall til parameteren, men har sålangt ikke funnet ut hvordan det gjøres. Følgende fungerer (naturligvis) ikke: $stmt->bindValue(1, array(1,2,3)); $stmt->bindValue(1, '1,2,3'); Den første fordi bindValue ikke støtter arrays, og nummer to fordi parametern da blir en streng. Finnes det en elegant måte å gjøre dette på? Iflg. forumtrådene jeg har kommet over, så er det ikke mulig, og manualen er litt unnvikende på dette området. Tips? En omtrentlig tilsvarende problemstilling oppstår ved "..ORDER BY ?". Hadde samme problem, endte med at jeg måtte gjøre følgende foreach($categorys as $category){ $in .= $category.','; } //så etter slette siste tegn etter jeg har loppa igjennom. med ORDER BY måtte jeg, ja gjøre det jalla og si at $this->db->prepare('SELECT * FROM product WHERE product_category = ? ORDER BY '.$sorting.' '.$sort); Muligens til lite hjelp, men søkte selv etter samme og fant nada. UPDATE: nvm klarte og overse at du prøvde med string i PDO, min løsning fungere med mysqli. Beklager Endret 14. november 2009 av TheGreatOne Lenke til kommentar
Ernie Skrevet 15. november 2009 Del Skrevet 15. november 2009 Hentet fra 2. avsnitt i beskrivelsen av PDO->prepare: [...] You cannot bind multiple values to a single named parameter in, for example, the IN() clause of an SQL statement. [...] Mao., lite trolig at det er mulig å få til slik du ønsker. Lenke til kommentar
FraXinuS Skrevet 15. november 2009 Del Skrevet 15. november 2009 Dette skal fungere tror jeg: $values = array(1,2,3); $stmt = $db->prepare('SELECT * FROM tbl WHERE id IN('.str_repeat('?,', count($values)-1).'?)'); $stmt->execute($values); Lenke til kommentar
Edorph Skrevet 16. november 2009 Forfatter Del Skrevet 16. november 2009 (endret) Takker for svar. Jeg er klar over at jeg kan gjøre det ved å manipulere SQL-strengen før jeg kjører prepare(), problemet er at jeg ikke vet parameterenes verdier (eller i dette tilfellet, antall parametre) på det tidspunktet :-) Endret 16. november 2009 av Edorph 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å