2017-06-11 65 views
0

我想創建一個使用PDO的功能,可以將數據插入到數據庫中的預備語句PDO預處理語句與動態變量

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) 

而且我得到一個錯誤

調用成員函數execute()boolean

SQL有問題,我不知道該如何調試。

+0

您不能綁定表或列。綁定也應該有1個值。 – chris85

回答

0

你需要建立使用類似的SQL ...

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

好的,我已經做了,但我想我可以使用準備功能來做到這一點。我不知道你不能綁定表或列。謝謝。 – mishke

+0

你應該非常小心讓用戶輸入查詢 - 使用準備語句的整個過程不再那麼重要 – Qirel