2

新しく登録したユーザーのデータをデータベースに挿入するメカニズムが必要です。私はこれを行うために PDO を使用しています。これが私の現在のコードです。

$dbc = new PDO('mysql:host=localhost;dbname=*****', *****, *****);

$insert_query = $dbc->prepare('INSERT INTO members(name, gender, email, pass)   
VALUES(:name, :gender, :email, :pass) WHERE email = :email LIMIT 1');

$insert_query->execute(array(':name' => $name, ':gender' =>    
$gender, ':email' => $email,  ':pass' => $pass));

ただし、ユーザーが登録フォームを送信しても何も起こりません。と をエコー$gender, $name, $emailし​​ようとしました$passが、それらはすべて正しい値を示しました。私は PDO を初めて使用しますが、何が問題なのかまったくわかりません。それはある種の構文エラーですか、それとも何か他のものですか?

エラー メッセージは表示されません。

4

3 に答える 3

5

ステートメント にLIMIT句を含めることは有効ではないと思います。は、MySQLシンタックス リファレンスのオプションの句には含まれていません。 INSERTLIMITINSERT

また、ステートメントWHEREでは無効な句もあります。INSERT

prepare()これは致命的なエラーであるか、構文エラーが原因でステートメントが失敗した場合に例外をスローするはずだったので、エラー報告がオンになっていないと思われます。次のようなエラーが表示されます

エラー 1064 (42000): SQL 構文にエラーがあります。「LIMIT 1」の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

$insert_query = $dbc->prepare('INSERT INTO members(name, gender, email, pass)   
VALUES(:name, :gender, :email, :pass) WHERE email = :email LIMIT 1');
//------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^

定義上、ステートメントは*内のグループINSERTと同じ数の行を挿入するため、とにかく必要はありません。ステートメントでaを使用できますが、その場合、 はではなくコンポーネントの節です。()VALUES ()LIMITLIMITINSERT INTO...SELECT...LIMITSELECTINSERT

* 潜在的なキー違反やその他の挿入の問題を明らかに無視する

ステートメントから複数のコンポーネント ( WHERE,LIMIT)を混同したという事実は、これがそもそもステートメントではなく、UPDATE実際に意図されたものであったかどうか疑問に思います。 新しい行専用です。 は既存の行を変更するためのもので、 では と の両方が有効です。UPDATEINSERTINSERTUPDATEWHERELIMITUPDATE

それは次のようになります。

$upd_query = $dbc->prepare('UPDATE members SET name = :name, gender = :gender, email = :email, pass = :pass) WHERE email = :email LIMIT 1');
于 2012-08-12T12:10:02.517 に答える
1

UPDATEクエリ構文に切り替えてみてください。必要なもののようです。

于 2012-08-12T12:27:23.410 に答える
1

LIMIT n「マイケル」が言ったように、INSERTクエリでは使用できません。

結局のところ、準備済みステートメントで同じ名前の名前付きパラメーター マーカーを 2 回使用することはできません。

于 2012-08-12T12:16:44.947 に答える