2

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'

私が欠けているものはありますか?ありがとうございました

4

1 に答える 1

2

SELECT行が返された場合は、従業員番号を使用して、後続UPDATEのクエリを発行できINSERTます。それが手動の方法です。

INSERT ... ON DUPLICATE KEY UPDATEでも同じ結果を得ることができますが、それはそれほど柔軟ではありません。

于 2012-09-22T02:35:57.460 に答える