Hallo PHP-Neuling,
du kannst ja auch ein paar Variablen einsparen. Aber ob Du es dann noch verstehst?
$result = mysqli_query($db, "SHOW COLUMNS FROM TABLE");
if ($result !== FALSE)
{
$colSet = implode("= ?, ",
array_column(mysqli_fetch_all($result, MYSQLI_ASSOC),
'Field'))
. " = ?";
}
else
{
// Fehler beim Lesen des Colset
}
Gar nicht so schlimm wie es aussieht 😉
- das SQL Statement muss nicht in eine Variable, das kann man direkt übergeben
- $result brauchen wir, weil die Query fehlschlagen kann und dann FALSE liefert. Das muss man abfragen und das fehlte bei Dir bisher noch.
- mysql_query liefert ein mysqli_result Objekt und das kann außer einem Einzelzeilen-Fetch auch einen Fetch aller Rows in einem Aufruf mit mysqli_fetch_all. Dem muss man nur sagen wie die Zeilen aussehen sollen. Da Du über Feldnamen zugreifen willst, ist es MYSQLI_ASSOC. Vorher hast DU fetch_array verwendet, der hat MYSQLI_BOTH als Default. fetch_all hat MYSQLI_NUM als Default, darum muss man angeben dass man Namen will.
- Das Ergebnis des mysqli_fetch_all ist ein Array aus den ermittelten Zeilen. Das jage ich durch den Spaltenprojektor array_column. Der isoliert aus einem Array von Arrays eine einzelne Spalte. Hier: Field.
// vorher:
$allRows = [ 0 => [ 'Marke' => 'Audi' , 'Modell' => 'A4' ],
1 => [ 'Marke' => 'BMW' , 'Modell' => '320' ],
2 => [ 'Marke' => 'Mercedes', 'Modell' => 'A180' ],
3 => [ 'Marke' => 'VW' , 'Modell' => 'Golf' ] ];
$marken = array_column($allRows, 'Marke');
// Ergebnis:
[ 0 => 'Audi', 1 => 'BMW', 2 => 'Mercedes', 3 => 'VW' ];
Und dieses Ergebnisarray wird nun mit '=?,' als Kleber implodiert und durch '=?' ergänzt.
Variablen? Nicht so viele. Die meisten Arbeitsdaten leben nur kurz auf dem Stack. Nachteil: Wenn was schiefgeht, kannst Du die Schritte nicht einzeln überprüfen. D.h. es ist durchaus nützlich, mit vielen Variablen anzufangen. Und solchen Code in Funktionen zu isolieren. Tablename rein, column Set raus.
Rolf
--
sumpsi - posui - obstruxi
sumpsi - posui - obstruxi