MySQLデータベースに書き込むフォームがあります。
例えば:
従業員番号:
名前:
年:
身長:
重さ:
最初のフィールドである従業員番号は、1人のユーザーに固有のIDです。
誰かが別の一意の従業員番号をフォームに入力すると新しいレコードが作成されますが、同じ番号を入力すると古いレコードが書き込まれるだけなので、戻ってくることができます。後で提出を調整します。
フォームからデータベースを作成するための現在のコードは次のようになります。
try {
$pdo = new PDO('mysql:host=localhost; dbname=db1', $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('INSERT INTO table
(
Time,
Unique_ID,
q1,
q2,
q3
)
VALUES
(
now(),
:Unique_ID,
:q1,
:q2,
:q3
)');
$stmt->execute(array(
':Unique_ID => $UID,
':q1' => $q1,
':q2' => $q2,
':q3' => $q3
));
# Affected Rows?
echo $stmt->rowCount(); // 1
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
ありとあらゆる助けに感謝します、ありがとう。
編集:以下の@Adrian Cornishのアドバイスに基づいて、クエリをREPLACEステートメントに調整しました。
今それは読みます:
try {
$pdo = new PDO('mysql:host=localhost; dbname=db1', $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('REPLACE INTO table
(
Time,
Unique_ID,
q1,
q2,
q3
)
VALUES
(
now(),
:Unique_ID,
:q1,
:q2,
:q3
)');
$stmt->execute(array(
':Unique_ID => $UID,
':q1' => $q1,
':q2' => $q2,
':q3' => $q3
));
# Affected Rows?
echo $stmt->rowCount(); // 1
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
さらに、MySQLデータベースのテーブル構造を編集して、次のドキュメントのように、「Unique_ID」フィールドのプロパティが「NotNull」および「UniqueIndex」になるようにしました。http: //dev.mysql.com/doc/refman /5.6/en/replace.html
状態:REPLACEはINSERTとまったく同じように機能しますが、テーブル内の古い行がPRIMARY KEYまたはUNIQUEインデックスの新しい行と同じ値である場合、新しい行が挿入される前に古い行が削除されます。
ただし、同じUnique_IDに対してデータを2回入力しようとすると、次のエラーが発生します。
Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '90210' for key 'Unique_ID_UNIQUE'
私が欠けているものはありますか?ありがとうございました