0

ユーザー情報を保存するテーブルがあります。各ユーザーには固有のユーザー ID がありますが、残りの情報はさまざまです。

そのテーブルを UPDATE するステートメントを実行しようとすると、userid = $userid で、Duplicate entry 'XXX' for key 'userid'XXX がユーザー ID であるというメッセージが表示されます。

ユーザーIDフィールドを一意に設定していますが、明らかにどこかで何か間違ったことをしました。

これが私の声明です

UPDATE `users` SET `screenname` =  '$screenname' ,`real_name` =  '$real_name' ,`profimg` =  '$profimg'  WHERE `userid` = '$userid'

テーブル構造

CREATE TABLE `users` (
  `userid` int(11) NOT NULL,
  `screenname` text COLLATE utf8_unicode_ci NOT NULL,
  `real_name` text COLLATE utf8_unicode_ci NOT NULL,
  `profimg` text COLLATE utf8_unicode_ci NOT NULL,
  UNIQUE KEY `userid` (`userid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
4

2 に答える 2

2

まず、一意のインデックスではなく主キー インデックスを使用する必要があります。主キー インデックスは null エントリを無効にし、列を NOT NULL に設定しますが、列は実際にはテーブルの主キーであるため、PK インデックスを使用することをお勧めします。

次のようにテーブルを再定義してみてください。

CREATE TABLE `users` (
  `userid` int(11) NOT NULL,
  `screenname` text NOT NULL,
  `real_name` text NOT NULL,
  `profimg` text NOT NULL,
  PRIMARY KEY `useridKey` (`userid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

AUTO_INCREMENT列属性も確認できます。
また、変数をクエリに入れる前に必ずエスケープして、SQL インジェクションを無効にしてください...

于 2009-11-13T08:03:52.910 に答える
1

PHPを使っていると思います。次のようにクエリを二重引用符で囲みましたか

$sql = "UPDATE foobar SET bar = '$foo' WHERE id = '$id'";

一重引用符を使用した場合、PHPは変数を置き換えません

于 2009-11-13T07:53:47.983 に答える