2016-07-25 2 views
0

値準備:PDOは、インサートが、私はPDOを使用して、私のデータベースに私のフォーム(createBuilder)からデータを挿入しようとすると、カスタム要求を準備

public function createUser($data) 
{ 
    $connect = $this->connectBDD(); 

    $rq = " INSERT INTO user (email, password, firstname, lastname, salt, role, addf, addl) 
      VALUES (:email, :password, :firstname, :lastname, :salt, :role, NULL, NULL)"; 

    $t = $connect->prepare($rq); 
    $t->execute([ 
     ':email'  => $data["email"], 
     ':password' => $data["plainPassword"], 
     ':firstname' => $data["firstname"], 
     ':lastname' => $data["lastname"], 
     ':salt'  => $data["salt"], 
     ':role'  => 'ROLE_USER' 
    ]); 

    return true; 
} 

しかし、私は次のエラーを取得:

SQLSTATE[42601]: Syntax error: 7 ERREUR: erreur de syntaxe sur ou près de « user » LINE 1: INSERT INTO user (email, password, firstname, lastname, sal... ^

これは2つの 'NULL'の最後の値のためですか?私は私の配列に2つの以上の変数を追加した場合、私はまだエラーを取得するので、私は

+4

プレースホルダは '' 'がない値です。 PDOのマニュアルを参照してください。 '' 'で囲まれたプレースホルダはありますか? –

+0

昨日同様の回答がありました。http://stackoverflow.com/questions/38548317/php-bound-parameters-database-call-wrong-number-of-parameters-if-i-use-a-colon/3 – chris85

+0

'VALUES(:email、:password、:firstname、:lastname、:salt、:role、NULL、NULL)と同様に、「SQLSTATE [42601]:構文エラー:7エラー:構文エラーが発生しました。ユーザー» " – Macbernie

答えて

2

':email'は文字:emなどの文字列です助けを

おかげで...そうは思いません... :email(WITHOUT:')はプレースホルダです。

プレースホルダは決して引用してはいけません。プレースホルダは引用符で囲まないでください。

$sql = "... VALUES(:email, :password, :firstname, etc..."; 
+0

引用符は@Marcですが、まだエラーはありません。私は質問を更新しました – Macbernie

+0

'user'は予約語です:https://dev.mysql.com/doc/refman/5.6/en/keywords.html –

+0

予約語ではありません)キーワードはありますが予約されていません。 –

関連する問題