Gå til innhold

[Løst]Hjelp til utviding av funksjon


Anbefalte innlegg

	 /********* 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 av Thomas.
Lenke til kommentar
Videoannonse
Annonse
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 av Thomas.
Lenke til kommentar
// $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

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
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å? :D Eller hva mente du?

Endret av Thomas.
Lenke til kommentar
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...