2017-08-18 2 views
2

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!

+0

Haben Sie die SQL-Zeichenfolge vor dem Ausführen dump? – MacBooc

+0

@MacBooc yep alles sieht richtig aus! –

+1

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

Antwort

1

Führen Sie diesen Code in Ihrem index.php aus?

echo $db->insert("users",[ 
    "Name" => "Timino", 
    "Email" => "[email protected]" 
]); // result 1 inserted or 0 failed 

Es ist möglicherweise kein Code-Problem.

Ich hatte ein ähnliches Problem, bei dem ich in meinen index.php den Einsatz zu testen wurde, und ich hatte eine Regel in meinem .htaccess, die Dateien nicht auf index.php gefunden würde umleiten. Und wenn der Browser versucht, Ihre favicon zu finden, wird er an die index.php weitergeleitet, die den Code noch einmal ausführen wird.

Wenn das der Fall ist, können Sie versuchen, den Code in eine andere Datei zu verschieben test.php und rufen Sie Ihre Domäne mit http://localhost/test.php und überprüfen Sie, ob es noch dupliziert.

+0

Sie hatten absolut Recht !! was mir passiert ist, ich hatte das gleiche problem auf apache und nginx, so dass ich denke, dass es ein code-problem und kein serverproblem ist aber nach dem kommentieren von umleitungsregeln jeder denke funktioniert als bevorzugt hier ist, was verursacht das problem für Apache 'RewriteRule^(. *) $ index.php? uri = $ 1 [QSA, L]' und für nginx 'try_files/$ uri/$ uri /index.php? uri = $ uri;' –

+0

@Timino Schön, dass du es hast es hat herausgefunden :) –