2017-06-11 2 views
0

ich eine Funktion erstellen möchten, die Daten in die Datenbank einfügen können PDO mit vorbereitete AnweisungPDO vorbereitete Anweisung mit dynamischen Variablen

public function test() { 
    $this->insert([ 
    'first_name' => $_POST['first_name'], 
    'last_name' => $_POST['last_name'], 
    'email' => $_POST['email'] 
    ]); 
} 


public function insert(array $data) { 

    $fields = ''; 
    $bindValues = ''; 
    $values = []; 

    foreach($data as $k => $v) { 
    $fields .= $k . ', '; 
    $bindValues .= ':' . $k . ', '; 
    $values[$k] = $v; 
    } 

    $fields = rtrim($fields, ', '); 
    $bindValues = rtrim($bindValues, ', '); 

    $insert = $this->db->prepare(" 
    INSERT INTO 
     :table 
    (:fields) 
    VALUES 
     (:values) 
    "); 

    $insert->execute([ 
    'table' => $this->table, 
    $values 
    ]); 
} 

dumped variables: 
1. $fields 
2. $bindValues 
3. $values 


'first_name, last_name, email' (length=28) 
':first_name, :last_name, :email' (length=31) 
array (size=3) 
    'first_name' => string 'Nikola' (length=6) 
    'last_name' => string 'Misic' (length=5) 
    'email' => string '[email protected]' (length=13) 

Und ich bin immer einen Fehler

Aufruf einer Memberfunktion execute() on boolean

Es stimmt etwas nicht mit der SQL, und ich weiß nicht, was oder wie es zu debuggen ist.

+0

Sie bauen keine Tabellen oder Spalten binden. Eine Bindung sollte auch 1 Wert haben. – chris85

Antwort

0

Sie müssen die SQL mit so etwas wie ...

$insert = $this->db->prepare(" 
    INSERT INTO 
     {$this->table} 
    ($fields) 
    VALUES 
     ($bindValues) 
    "); 
+0

Ja, ok, ich habe es schon gemacht, aber ich dachte, ich könnte es mit der Prepare-Funktion machen. Ich wusste nicht, dass Sie keine Tabellen oder Spalten binden können. Vielen Dank. – mishke

+0

Sie sollten wirklich vorsichtig sein, um Benutzereingaben in die Abfrage zu lassen - der ganze Sinn der Verwendung vorbereiteter Anweisungen ist dann weg – Qirel