私は小さな趣味のアプリケーションを開発しています。私は以前にMySQLとPostgreSQLを使用したことがありますが、ここではn00bであり、助けていただければ幸いです。
MySQLデータベースに「TECH」というテーブルがあります。このテーブルには、「ID」(主キー)と「name」(技術者の名前-いかなる種類のキーでもない)の2つの列があります。次に、いくつかの行の例を示します。
+----+--------+
| ID | name |
+----+--------+
| 1 | Python|
| 2 | ASP |
| 3 | java |
+----+--------+
作成するコードは次のTECH
とおりです。
CREATE TABLE TECH (
id INT(5) ,
name VARCHAR(20),
PRIMARY KEY (id)
);
ユーザーが新しいテクノロジーをに入力するためのhtmlフォームを開発しましたTECH
。ただし、に重複するエントリが存在しないようにしたいと思いますTECH
。たとえば、ユーザーはID 4を割り当てるために「Python」を入力することを許可されるべきではありません。さらに、ユーザーは別のIDで「pYthon」(または大文字と小文字の変形)を入力することも許可されるべきではありません。
現在、これを行う次のコードがあります(MySQL側ではなくPHP側で):
// I discovered that MySQL is not case sensitive with TECH.name
$rows = 0;
$result = $mysql_query("SELECT * FROM tech AS T WHERE T.name='python'");
while ($row = mysql_fetch_array($result)) {
$rows += 1;
}
if ($rows != 0) {
echo "'python' cannot be inserted as it already exists";
} else {
// insertion code
}
UNIQUE (name)
これを行う正しい方法は、PHP側で「挿入エラー」を実行してキャッチすることにより、TECH.nameをUNIQUEに制限することです。ただし、このプロセスに関して次の2つの質問があります。
- UNIQUE制約を定義すると、上記の大文字と小文字が区別されないことが維持されますか?
- PHP側でこのような挿入エラーを正確にキャッチするにはどうすればよいですか?
私はこれまたは誰かが持っているより良いアイデアで助けていただければ幸いです。