2017-06-11 1 views
0

Je veux créer une fonction qui peut insérer des données dans la base de données à l'aide PDO préparée déclarationAOP préparé avec déclaration des variables dynamiques

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) 

Et je reçois une erreur

Appel à une fonction membre execute() sur booléen

Il y a quelque chose qui cloche avec le SQL, et je ne sais pas quoi ou comment le déboguer.

+0

Vous ne pouvez pas lier des tables ou des colonnes. Une liaison doit avoir une valeur également. – chris85

Répondre

0

Vous devez construire le SQL en utilisant quelque chose comme ...

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

Ouais ok, je l'ai déjà fait mais je pensais pouvoir le faire en utilisant la fonction de préparation. Je ne savais pas que vous ne pouvez pas lier des tables ou des colonnes. Je vous remercie. – mishke

+0

Vous devriez faire très attention à laisser l'utilisateur entrer dans la requête - le point entier d'utiliser les instructions préparées est alors parti – Qirel