理解できない理由により、Drupalインストールでユーザーを作成することができません(これは前回試したときの問題ではありませんでした)。
UIで(/admin/people/create
で)試行する場合、またはdrush user-create
で試行する場合、どちらの場合でも、次のようなエラーメッセージが表示されます。
WD rules: Unable to modify data "account:field-user-image:alt": Invalid data value given.
↪ Be sure it matches [warning] the required data type and format.
WD rules: Unable to evaluate action data_set.
WD user: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate
↪ entry '187810' for key[error] 'PRIMARY': INSERT INTO {users} (uid, name, pass, mail,
↪ created, access, status, data) VALUES (:db_insert_placeholder_0,
↪ :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3,
↪ :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6,
↪ :db_insert_placeholder_7);
Array
(
[:db_insert_placeholder_0] => 187810
[:db_insert_placeholder_1] => [email protected]
[:db_insert_placeholder_2] => $S$XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXX
[:db_insert_placeholder_3] => [email protected]
[:db_insert_placeholder_4] => 1329491489
[:db_insert_placeholder_5] => 0
[:db_insert_placeholder_6] => 1
[:db_insert_placeholder_7] => a:1:{s:34:"user_relationships_ui_auto_approve";a:0:{}}
)
in drupal_write_record() (line 6975 of /var/www/html/includes/common.inc).
WD php: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate
↪ entry '187810' for key[error] 'PRIMARY': INSERT INTO {users} (uid, name, pass, mail,
↪ created, access, status, data) VALUES (:db_insert_placeholder_0,
↪ :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3,
↪ :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6,
↪ :db_insert_placeholder_7);
Array
(
[:db_insert_placeholder_0] => 187810
[:db_insert_placeholder_1] => [email protected]
[:db_insert_placeholder_2] => $S$XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXX
[:db_insert_placeholder_3] => [email protected]
[:db_insert_placeholder_4] => 1329491489
[:db_insert_placeholder_5] => 0
[:db_insert_placeholder_6] => 1
[:db_insert_placeholder_7] => a:1:{s:34:"user_relationships_ui_auto_approve";a:0:{}}
)
in drupal_write_record() (line 6975 of /var/www/html/includes/common.inc).
PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
↪ '187810' for key 'PRIMARY': INSERT INTO {users} (uid, name,
↪ pass, mail, created, access, status, data) VALUES (:db_insert_placeholder_0,
↪ :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3,
↪ :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6,
↪ :db_insert_placeholder_7); Array
(
[:db_insert_placeholder_0] => 187810
[:db_insert_placeholder_1] => [email protected]
[:db_insert_placeholder_2] => $S$XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXX
[:db_insert_placeholder_3] => [email protected]
[:db_insert_placeholder_4] => 1329491489
[:db_insert_placeholder_5] => 0
[:db_insert_placeholder_6] => 1
[:db_insert_placeholder_7] => a:1:{s:34:"user_relationships_ui_auto_approve";a:0:{}}
)
in drupal_write_record() (line 6975 of /var/www/html/includes/common.inc).
Drush command terminated abnormally due to an unrecoverable error.
(↪
は、読みやすくするために行を折り返したことを示しています)。
これは、重複するusers.uid
をデータベースに入力しようとしているためであることがわかりますが、なぜそうなるのかわかりません。 users.uid
の値を手動で入力したことがないので、autoincrement
で処理を実行できます。
何か足りないものはありますか? Drupal(またはmySQL)が自動インクリメント値をリセットし、有効なUIDで挿入しようとするように何かをリセットする方法はありますか?
あるいは、手動でデータベースをいじるだけですか?驚くほど多くのフィールドをいじる必要があるので、それはやっかいですが、もっと簡単ならそれを行うことができますか?
更新:友人が mysqlcheck
を実行することを提案しましたが、大丈夫です。また、テーブルの自動インクリメントをリセットする Clive の suggestion では問題が解決されていないようです。
reallyが長い間取得した後reallyこれに不満を感じたので、修正しましたSQLの1行で。 (ある日、私は本当にコンピューターが嫌いです。)
データベーステーブルsequences
には、1つの行と1つの列が含まれています。この sequences.value
は、(特に)新しいユーザーアカウントに使用されるautoincrement
IDです。
なぜそれが間違っていたのか、どのように間違っていたのかわかりません。だが
mysql> update sequences set value = 200000;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
そして突然、ユーザーアカウントの作成が再び機能します。
ある日、私は本当にコンピューターが嫌いだと言ったことがありますか? ; o)
同様の問題が発生し、ルールまでたどりました。このエラーの原因となるルールに関するスレッドは、ここにあります: http://drupal.org/node/11698
自動増分値はかなり簡単にリセットできます。
ALTER TABLE users AUTO_INCREMENT = 187811
少し奇妙ですが、ユーザーを追加すると、uid
はコード行で決定されます。
$account->uid = db_next_id(db_query('SELECT MAX(uid) FROM {users}')->fetchField());
データベースから最大のユーザーIDを取得し、PDOを使用して次に使用可能なIDを取得するため、自動インクリメントフィールドが実際に入力されるかどうかはわかりません。
いずれの方法でも、テーブルに対して変更クエリを実行する価値がありますが、これでうまくいく場合があります。