Tabellen- und Spaltennamen können keine Variablen sein, deshalb wirst du zumindest diese direkt in den Query hineinbasteln müssen.
Mein Ansatz würde in etwa so aussehen. Die Funktion setzt voraus, dass sowohl der Tabellenname als auch die Spaltennamen entweder nicht von Benutzern angefasst werden können oder vorher entsprechend bereinigt wurden. Wenn das nicht der Fall sein sollte, fehlt hier Code um SQL Injections zu vermeiden (nichts hindert mich daran, in die tabelle Users` VALUES (); DROP TABLE Users; -- etwas einzufügen und damit "aus Versehen" die Users Tabelle zu löschen).
function insert($values, $table, $connection, $types, $showError = false)
{
// macht aus jedem Key in $values einen `-maskierten Spaltennamen und fasst diese in einen kommaseparierten string zusammen
$columnNames = implode(',', array_map(function($v) { return "`$v`";}, array_keys($values)));
// erstellt einen string mit der richtigen anzahl kommaseparierter parameter
$parameters = implode(',', array_map(function($v) { return '?'; }, $values));
$query = "INSERT INTO `$table` ($columnNames) VALUES ($parameters)";
$insprep = $connection->prepare($query);
call_user_func_array(array($insprep, 'bind_param'), array_merge(array($pattern), array_values($values)));
$res = $insprep->execute();
if(!$res && $showError)
{
echo 'Eintrag konnte nicht hinzugefügt werden';
}
// Es kann nie schaden, etwas zurückzugeben, anhanddessen der rest des Programms feststellen kann, ob die Operation geklappt hat. In diesem Fall TRUE oder FALSE.
return (boolean)$res;
}
Alles anzeigen
Wer Syntax- oder Logikfehler findet, darf sie behalten. Disclaimer: Komplett ungetestet, weil keine PHP-Umgebung zur Hand.