4

ユーザーが名前を送信して db テーブル (runningList) に追加できるようにするアプリケーションを構築しようとしています。名前を追加する前に、別のテーブル (controlList) に対して名と姓を確認したいと思います。(controlList) に存在する必要があります。そうでない場合、応答名が無効です。名前が有効な場合は、firstname と lastname を (runningList) に対してチェックし、まだ存在しないことを確認します。そこにない場合は、名と姓を挿入します。存在する場合、応答名は既に使用されています。

以下は、controlList に対してテストを追加しようとする前に機能していたコードです。余分なステップを追加しようとしたときに、どういうわけかそれを完全に壊してしまいました。

if (mysql_num_rows(mysql_query('SELECT * FROM runninglist WHERE firstname=\'' .$firstname . '\' AND lastname=\'' . $lastname . '\' LIMIT 1')) == 0)
{
 $sql="INSERT INTO runninglist (firstname, lastname)
 VALUES ('$_POST[firstname]','$_POST[lastname]')";
}
else
{
echo "This name has been used.";
 }

なにか提案を?

4

2 に答える 2

3

(firstname, lastname) に「一意の」インデックスを作成します。

次に、挿入を実行すると失敗します。エラーを無視する (または他のアクションを実行する)


編集:マニュアルからの引用:

UNIQUE インデックスは、インデックス内のすべての値が個別でなければならないという制約を作成します。既存の行と一致するキー値を持つ新しい行を追加しようとすると、エラーが発生します。

于 2012-09-12T03:36:21.840 に答える
3

最良の方法は、両方の列にインデックスを作成することですfirstnamelastname

ALTER TABLE youtableName ADD UNIQUE uniqueName (firstname,lastname)

このように、既に存在する名前を挿入しようとするとエラーが発生します。

于 2012-09-12T03:41:01.660 に答える