2017-06-11 7 views
0

動的変数でステートメントをプリペアドステートメントPDOは、私はPDOを使用してデータベースにデータを挿入することができます関数を作成したい


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) 

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 
    ]); 
} 
そして、私はエラー

を得ているの準備しました

メンバー関数への呼び出しbooleanでexecute()ブール

SQLに問題があり、デバッグする方法や方法がわかりません。

+0

...何かなどを使用してSQLを構築する必要があります。バインディングには1つの値も必要です。 – chris85

答えて

0

あなたは、テーブルまたは列をバインドすることはできません

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

ええ、私はすでにそれをしましたが、私は準備機能を使ってそれを行うことができると思いました。私はあなたがテーブルや列を束縛できないことを知らなかった。ありがとうございました。 – mishke

+0

あなたは本当にユーザーの入力を問い合わせに慎重にすべきです - 準備されたステートメントを使用する全体のポイントは – Qirel

関連する問題