2016-09-22 2 views
-1

Ich machte ein einfaches Beispiel in PHP, das Ziel ist einfach die Werte des Arrays in die Datenbank einfügen. Die Feldnamen sind die Array-Schlüssel und die Feldwerte sind die Array-Werte. Ich wählte objektorientierten Stil für Abfragen, weil ich OOP übe. Als ich es geloopt habe, war das Problem: Der Code akzeptiert nur den ersten Index des Arrays, das ist der "Name"; Es soll die vier Werte akzeptieren, da die Tabelle aus vier Feldern besteht (Name, E-Mail, Benutzername, Passwort). Jetzt ist das Ergebnis in der Datenbank nur das Feld name hat Wert, der Rest der Felder sind null. Hier ist der Code:Foreach-Schleife akzeptiert nur den ersten Index des Arrays

<?php 

class User { 
    public static function insert($table, $table_fields = array()) { 
     if(count($table_fields)) { 
      foreach($table_fields as $field_name => $field_value) { 
       return "INSERT INTO $table ($field_name) VALUES ('$field_value')"; 
      } 
     } 
     return false; 
    } 
} 

$connect = mysqli_connect('localhost', 'root', '', 'sample'); 

mysqli_query($connect, User::insert('users', array(
    'name' => 'Sample Name', 
    'email' => '[email protected]', 
    'username' => 'sampleusername', 
    'password' => '12345' 
))); 

?> 

Ich möchte wissen, was mit meinem Code falsch ist, und es würde mir viel mehr Dankbarkeit, wenn Sie mir Tipps für die Verbesserung geben.

+3

Die erste Rückgabe beendet die Ausführung der Funktion. – Phiter

+0

Sie erfinden das Rad neu, indem Sie versuchen, Ihre eigene aktive Aufnahmefunktion zu erstellen, Sie sollten nach einem bereits vorhandenen suchen, wie [PHP ActiveRecord] (http://www.phpactiverecord.org/) – Phiter

+5

Auch nicht bauen Abfragen * von Hand *, ** immer ** verwenden [vorbereitete Anweisungen] (https://php.net/manual/mysqli.quickstart.prepared-statements.php). – Yoshi

Antwort

-1

Code unten wird Ihr Beispiel funktionieren, wenn Sie immer noch foreach verwenden möchten, müssen Sie die Rückkehr danach.
Und wie Kommentare darauf hingewiesen, müssen Sie vorbereitete Anweisungen oder eine Bibliothek verwenden, um Ihre Abfragen zu erstellen.

<?php 

class User { 
    public static function insert($table, $table_fields = array()) { 
     if(count($table_fields)) { 
      return "INSERT INTO $table ('".implode("','",array_keys($table_fields))."') 
          VALUES ('".implode("','",$table_fields)."')"; 
     } 
     return false; 
    } 
} 

$connect = mysqli_connect('localhost', 'root', '', 'sample'); 
mysqli_query($connect, User::insert('users', array(
    'name' => 'Sample Name', 
    'email' => '[email protected]', 
    'username' => 'sampleusername', 
    'password' => '12345' 
))); 
+0

Ihr Code ist falsch, VALUES ('' .implode ('', ' ", $ table_fields)." ') ";; syntax error; – Dave

+0

Korrigiert, sorry – ban17

+0

Sie tun also im Grunde alles manuell _prepare_ macht automatisch .. – dbf

Verwandte Themen