Ich habe eine Funktion erstellt, die Daten in MySQL-Datenbank fügt dynamisch nur Code Wiederholungen zu vermeiden, wie so:PHP Dynamische Insert-Funktion wird das Einfügen doppelte Zeilen
function insert($table, $data)
{
// connection
global $db;
if(!is_array($data)) die("Error : second parameter must be an array of keys and values");
$keys = array_keys($data);
$values = array_values($data);
// sql query
$sql = "INSERT INTO `$table` (";
// if more than one column
if(count($data) > 1)
{
for($i = 0; $i < count($data) -1; $i++)
{
$sql .= "`$keys[$i]`, ";
}
$sql .= "`" . end($keys) . "`) VALUES (";
for($i = 0; $i < count($data) -1; $i++)
{
$sql .= ":$keys[$i], ";
}
$sql .=":" . end($keys) . ")";
}else{ // only one column
$sql .= "`$keys[0]`) VALUES(:$keys[0])";
}
// make keys as named placeholders
$binds = array_map(function($elem){
return ":".$elem;
}, $keys);
// combine placeholders with values
$binds = array_combine($binds, $values);
$stmt = $db->prepare($sql);
return $stmt->execute($binds) ? true : false;
}
So Später ich so nur Daten eingeben:
echo insert("users",[
"Name" => "Timino",
"Email" => "[email protected]"
]); // result 1 inserted or 0 failed
Wie auch immer das Einfügen von doppelten Zeilen ?? wenn ich Debuggen den Code alles in Ordnung sieht
echo $sql; //INSERT INTO `users` (`Name`, `Email`) VALUES (:Name, :Email)
print_r($binds) // Array
(
[:Name] => Timino
[:Email] => [email protected]
)
Was mache ich falsch?
Hinweis: Ich habe den Code auf prozedurale aktualisiert, so dass es für jeden einfach ist, es schnell zu testen!
Haben Sie die SQL-Zeichenfolge vor dem Ausführen dump? – MacBooc
@MacBooc yep alles sieht richtig aus! –
irgendwie seltsam, ich nehme an, dass Echo $ db-> Einfügung nicht in der Schleife ist oder 2 mal aufgerufen? Eigentlich finde ich nichts falsch in Ihrem Code – MacBooc