0

XDBのテーブルに追加しようとしていますが、このエラーが発生します。Xテーブルに存在しなくても、そこにあると表示されます。DBに追加されていXますが、このエラーを取り除きたいと思います。関連性があるかどうかはわかりませんが、Mysqliのプリペアドステートメントを使用しており、このエラーはを使用して出力され$statement->errno." ".$statement->errorます。誰かが私にこれを説明できますか?ありがとう。

更新:これはコードです: X = USER_USERNAME

$stmt = $mysqli->prepare("INSERT INTO USERS (USER_USERNAME, USER_EMAIL, USER_BIRTHDAY, USER_PASSWORD, USER_SALT, USER_IP, USER_ACTIVATION_CODE) VALUES (?,?,?,?,?,INET_ATON(?),?)");
            $stmt->bind_param('sssssss',$username,$email,$date,$hashed_password,$salt,$IP,$activation_code);
            $stmt->execute();
            if (!$stmt->execute()) {
                echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
            }
            else {
                echo "ok";
            }

CREATE TABLEユーザーを表示する:

 CREATE TABLE `USERS` (
 `USER_ID` int(11) NOT NULL AUTO_INCREMENT,
 `USER_FIRSTNAME` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
 `USER_LASTNAME` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
 `USER_USERNAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
 `USER_PASSWORD` varchar(128) CHARACTER SET utf8 DEFAULT NULL,
 `LEVEL_ID` int(11) NOT NULL,
 `USER_BIRTHDAY` date DEFAULT NULL,
 `USER_EMAIL` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
 `USER_GENDER` enum('M','W','U') CHARACTER SET utf8 DEFAULT NULL,
 `USER_COUNTRY` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
 `USER_LOCATION` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
 `USER_ADDRESS` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
 `USER_HOUSENUMBER` varchar(8) CHARACTER SET utf8 DEFAULT NULL,
 `USER_AVATAR` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
 `USER_REGISTRATION_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `USER_ACTIVATION_DATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 `USER_STATUS` enum('REGISTERED','ACTIVE','BANNED','NONACTIVE') CHARACTER SET utf8 DEFAULT NULL,
 `USER_BANNED_DATE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 `USER_LATEST_LOGIN` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 `USER_EXP` bigint(20) DEFAULT NULL,
 `USER_DESCRIPTION` text CHARACTER SET utf8,
 `USER_ACTIVATION_CODE` varchar(32) CHARACTER SET utf8 NOT NULL DEFAULT '0',
 `USER_SALT` varchar(15) CHARACTER SET utf8 NOT NULL,
 `USER_IP` int(10) NOT NULL,
 `USER_REMEMBER_KEY` varchar(32) CHARACTER SET utf8 NOT NULL,
 PRIMARY KEY (`USER_ID`),
 UNIQUE KEY `USER_USERNAME` (`USER_USERNAME`),
 UNIQUE KEY `USER_EMAIL` (`USER_EMAIL`),
 KEY `LEVEL_ID` (`LEVEL_ID`)
) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=latin1
4

4 に答える 4

1

ID (またはその他のフィールド) が 1 設定されたレコードを挿入しようとしている可能性がありますが、そのようなレコードはテーブルに既に存在します。主キーであるフィールドには、レコードごとに一意の値が必要です。

このエラーを回避するために、簡単なエラー チェックを試すことができます。

$rows = mysql_query("SELECT X from tablenme WHERE X = Y;");

if(mysql_num_rows($rows) > 0){
    echo 'Error Messege';
}else{
    insert...
}

ここで、X は主キーまたは外部キー列で、Y はその列に挿入される値です。

編集:問題を引き起こした可能性のある問題のいくつかは、挿入ステートメントでnullにできない特定の列を指定していない可能性があります。と のようLEVEL_IDUSER_REMEMBER_KEY。それらはに設定されてNOT NULLいますが、挿入ステートメントを使用して値が挿入されていません。

'sssssss'また、最初の列がUSER_USERNAMEで、対応する値が であるときに挿入する理由もわかりません$username。それもチェックしてください。

SQL フィドル

于 2012-08-31T20:46:58.123 に答える
0

これは、たとえば、制約(PKやUKなど)に違反する値を挿入または更新しようとしているためです。

テーブルにIDがあり、それがPKまたは一意キーである場合、一意の値を1つだけ持つことができます...繰り返すことはできません...。

一意キーを使用すると、Nullを設定できます...ただし、制約を破ることになるため、同じ列で値を繰り返すことはありません...詳細については、http://dev.mysql.com/doc/refmanを参照してください。 /5.0/es/constraints.html

于 2012-08-31T20:43:49.690 に答える
0

そのエラーが発生した場合は、Xテーブルに存在します。どうやらあなたはそれに気づいていませんが、それはそこにあります。(トリミングされたスペースや大文字と小文字の区別などを確認してください。)

phpMyAdminでエラーが発生しない場合は、送信していると思われるクエリは実際には送信しているクエリではありません。ほとんどの場合、フィールドに空白を送信しており、一度送信すると、それ以降のすべてのクエリで同じ空白の値が使用されます。

確認する最も簡単な方法は、テーブルからすべてを削除することです(必要に応じて、最初に別の場所にコピーします)。次に、クエリを実行して、実際に挿入されたものと、挿入されると予想されたものを確認します。

于 2012-08-31T20:44:42.503 に答える
0

すでに主キーまたは一意キーを定義しました同じ値を挿入しようとしました。そのとき、同じ値がすでに存在するため、主キーまたは一意キーに冗長な値を設定することはできません。

こんな感じです。と、のテーブルがあるidとします。最初の行を次のように挿入します。nameidprimary key

INSERT INTO `users` (`id`, `name`) VALUES (1, 'Praveen');
INSERT INTO `users` (`id`, `name`) VALUES (1, 'Kumar');

id2番目のクエリは一意性に違反しています。

解決策:可能であれば、テーブルを切り捨ててから、クエリを再実行してください。

試すためのいくつかのステップ

  1. 一意の制約に違反している他のフィールドも確認してください。
  2. 生成されるクエリを確認します。
  3. 同じクエリをphpMyAdminに入れて確認します。
于 2012-08-31T20:45:44.750 に答える