Thomas. Skrevet 27. januar 2010 Del Skrevet 27. januar 2010 (endret) /********* oppdatere informasjon i databasen **********/ public function dbOppdater ( $tabell , $felt , $value , $pi , $id ) { $this->con(); $sql = "UPDATE `$tabell` SET `$felt` = '{$value}' WHERE `$pi` = :id"; $stmt = $this->db->prepare($sql); $stmt->bindParam(':id', $id, PDO::PARAM_STR); $stmt->execute(); } Det jeg vil, er at jeg kan lage til en array med hva som skal settes inn (oppdateres). F.eks: array('rad1' => 'value1', 'rad2' => 'value2'); Hvordan kan dette gjøres på enklest mulig måte? Endret 27. januar 2010 av Thomas. Lenke til kommentar
TheClown Skrevet 27. januar 2010 Del Skrevet 27. januar 2010 foreache den i spørringen? Lenke til kommentar
Thomas. Skrevet 27. januar 2010 Forfatter Del Skrevet 27. januar 2010 (endret) foreache den i spørringen? $d = array('r' => 100+9, 'rr' => 'otott'); foreach ( $d as $r => $v ) { echo "`$r`" . ' = ' . $v . ', <br>'; } Slik da. Hvordan fjerner jeg kommaet i siste setningen ? Enten om det er 1 eller fler rader som skal oppdateres. Substr kan vel ikke brukes her.. Endret 27. januar 2010 av Thomas. Lenke til kommentar
Jonas Skrevet 28. januar 2010 Del Skrevet 28. januar 2010 foreach ( $d as $var => $val ) $d[$var] = $var . ' = ' . $val; echo join ( ', ', $d ); Lenke til kommentar
TheClown Skrevet 28. januar 2010 Del Skrevet 28. januar 2010 Før foreach, kjør count på arrayen, inne i loopen har du en $i++ og en ifstatement for hvis loopen går siste runden. Skjønner du? Lenke til kommentar
Alex Moran Skrevet 28. januar 2010 Del Skrevet 28. januar 2010 // $this->update('users', array('username' => 'Arne', 'email' => '[email protected]'), 'id=?', array($id); public function update($table, $data, $where = NULL, $arguments = array()) { $sql = "UPDATE {$table} SET "; $set = array(); foreach ($data as $column => $value) { $set[] = "`{$column}` = ?"; } $sql .= implode(', ', $set); $sql .= ($where !== NULL) ? " WHERE {$where}" : NULL; $statement = $this->dbh->prepare($sql); $statement->execute(array_merge(array_values($data), $arguments)); return $statement; } Lenke til kommentar
Thomas. Skrevet 28. januar 2010 Forfatter Del Skrevet 28. januar 2010 Takk. Dette er hva jeg kom opp med tilslutt: public function dbOppdater ( $tabell , $felter , $pi , $id ) { $this->con(); foreach ( $felter as $v => $va ) $felter[$v] = '`' . $v . '`' . ' = ' . '\'' . $va . '\''; $sql = "UPDATE `$tabell` SET " . implode ( ', ', $felter ) . " WHERE `$pi` = :id"; echo $sql; $stmt = $this->db->prepare($sql); $stmt->bindParam(':id', $id, PDO::PARAM_STR); $stmt->execute(); } Lenke til kommentar
Jonas Skrevet 28. januar 2010 Del Skrevet 28. januar 2010 Nei, nei, nei, nei, nei! Hvorfor tror du at du bruker prepared statements til å begynne med? Lenke til kommentar
Alex Moran Skrevet 28. januar 2010 Del Skrevet 28. januar 2010 (endret) Du burde bruke query parameters i prepared statements over hele fjøla, ikke bare på id. Red.: late Endret 28. januar 2010 av Josh Homme Lenke til kommentar
Thomas. Skrevet 28. januar 2010 Forfatter Del Skrevet 28. januar 2010 (endret) Nei, nei, nei, nei, nei! Hvorfor tror du at du bruker prepared statements til å begynne med? public function dbOppdater ( $tabell , $felter , $pi , $id ) { $this->con(); foreach ( $felter as $v => $va ) $felter[$v] = '`' . $v . '`' . ' = ' . '\'' . $va . '\''; $sql = "UPDATE `:tabell` SET :felter WHERE `:rad` = :id"; echo $sql; $stmt = $this->db->prepare($sql); $stmt->bindParam(':id', $id, PDO::PARAM_STR); $stmt->bindParam(':tabell', $tabell, PDO::PARAM_STR); $stmt->bindParam(':felter', implode ( ', ', $felter ), PDO::PARAM_STR); $stmt->bindParam(':rad', $pi, PDO::PARAM_STR); $stmt->execute(); } Fornøyd nå? Eller hva mente du? Endret 28. januar 2010 av Thomas. Lenke til kommentar
Alex Moran Skrevet 28. januar 2010 Del Skrevet 28. januar 2010 Nei, det der fungerer ikke. Les litt mer om prepared statements du. Se lenger opp. Lenke til kommentar
Thomas. Skrevet 28. januar 2010 Forfatter Del Skrevet 28. januar 2010 Nei, det der fungerer ikke. Les litt mer om prepared statements du. Se lenger opp. public function dbOppdater ( $tabell , $data , $hv = NULL , $args = array() ) { $this->con(); $sql = "UPDATE {$tabell} SET "; $se = array(); foreach ($data as $rad => $value) $se[] = "`{$rad}` = ?"; $sql .= implode(', ', $se); $sql .= ($hv !== NULL) ? " WHERE {$hv}" : NULL; $stmt = $this->db->prepare($sql); $stmt->execute(array_merge(array_values($data), $args)); return $stmt; } 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å