Hallo zusammen,
ich habe folgenden Code in meiner Update-Methode …
protected function update( array $columns = [], array $condition = [] ): void
{
$table = $this -> getTable();
$attrs = array_merge( $columns, $condition );
$columns = implode( ' AND ', array_map( fn( $attr ) => "$attr = :$attr", $columns ) );
$condition = implode( ' AND ', array_map( fn( $attr ) => "$attr = :$attr", $condition ) );
$stmt = self::prepare( "UPDATE $table SET $columns WHERE $condition" );
foreach ( $attrs as $attr )
$stmt -> bindValue( ":$attr", $this -> { $attr } );
$stmt -> execute();
}
... und rufe sie bspw. so auf …
$games -> update( [ 'franchise' ], [ 'gameID' ] );
.
Wenn ich den columns-Array um einen zusätzlichen String ergänze, z. B. so ...
$games -> update( [ 'franchise', 'platform' ], [ 'gameID' ] );
... dann aktualisiert die Methode die entsprechenden Spalten in der Datenbank nicht bzw. wird beim angegeben Eintrag für franchise eine 0 gesetzt und platform bleibt unverändert. Bei nur einem String im Array funktioniert das Update übrigens.
Ich verstehe beim besten Willen nicht, was da schiefläuft.
Was übersehe ich?
Grüße
Boris