1

プログラムでその場でユーザーを作成して古いデータベースと同期するスクリプトがあります。しばらくの間、それは非常にうまくいっています。ユーザーを挿入しようとすると、突然、重複キーエラーでエラーが発生し始めました。正確なエラーは次のとおりです。

Duplicate entry 'user@email.com' for key 2 query: INSERT INTO users (name, mail, status, pass, created).....

そこでクエリを実行すると、mysql コンソールからこのエラーを直接再現できます。したがって、ここで問題が奇妙になります。エントリ「user@email.com」はユーザーテーブルのどこにも存在しません。したがって、データベースにこの電子メールアドレスのレコードがないため、重複エントリエラーが発生することに当惑しています。

これはmysqlコンソールの直接コピー/貼り付けです。ユーザーを保護するために機密データが変更されています

mysql> INSERT INTO users (name, mail, status, pass, created) VALUES ('username', 'user@email.com', 1, 'encryptedpassword', 1294946026);

ERROR 1062 (23000): Duplicate entry 'user@email.com' for key 2

mysql> select * from users where mail='user@email.com';

Empty set (0.00 sec)

4

2 に答える 2

1

user_save関数を使用する必要があります。

たとえば、ニュース ユーザーの場合:

$user = user_save( null, array( 'name' => 'the name' , 'mail' => 'the user mail'));
于 2012-09-20T21:58:08.090 に答える
0
  • テーブルをエクスポートしてローカルに再作成し、挿入を再試行してください。
  • 多分エンコードの問題がありますか?同じドメインを持つすべてのユーザーを検索して、同様のエントリがあるかどうかを確認してください。
  • Devel モジュールのクエリ テーブルを使用して、Drupal 内で実際に何が起こっているかを確認することもできます。
于 2011-01-14T11:45:13.880 に答える