03 Jul

Mysql’de Tekrarlayan (Mükerrer) Kayıt Algılama

Bir tabloda , sadece bir adet aynı nitelikte bir kayıt olmasını istediğimizde , ilgili alan veya alanları “unique” yaparak bunu kolaylıkla yapabiliyoruz. Alanı unique yaptıktan sonra, aynı nitelikte kayıt girmeye çalıştığımızda bize hata döndürür. İşte bu hata ve hata kodunu izleyerek, sistemde tekrarlayan bir kayıt olup olmadığını bulabiliriz .

Örnek olarak bir testdb oluşturalım, sonrasında aşağıdaki sorguları çalıştırarak tablomuzu oluşturalım :

CREATE TABLE `kullanici` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`isim` VARCHAR( 32 ) NOT NULL ,
`nick` VARCHAR( 32 ) NOT NULL ,
`sifre` VARCHAR( 32 ) NOT NULL ,
`eposta` VARCHAR( 32 ) NOT NULL ,
`web` VARCHAR( 32 ) NOT NULL
) ENGINE = MyISAM;

ALTER TABLE `kullanici` ADD UNIQUE(`nick`);
ALTER TABLE `kullanici` ADD UNIQUE(`eposta`);

kullanıcı tablosu oluşturarak , nick ve eposta alanlarımızı unique yapıyoruz. Böylece tablomuzda benzer nick ve eposta kaydedildiğinde bize hata döndürecektir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$pdo =new PDO('mysql:dbname=testdb;host=localhost','root','q1w2e3');
$pdo->setAttribute(Pdo::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql='insert into kullanici values(null,?,?,?,?,?)';

try {
   $stm =$pdo->prepare($sql);
   $stm->execute(array('ersin dogan','ersin','1234','deneme@ersindogan.com','http://ersindogan.com'));
   echo 'Kayıt başarılı';
}catch(PDOException $e) {
   if($e->getCode() ==23000 ) {
      echo 'Bu kullanıcı veya eposta sistemde mevcut<br/>';
   }
   echo '<b>Bir hata oluştu : </b>'. $e->getMessage();
}

Bu kodu ilk çalıştırdığımızda ,bilgiler tabloya kaydedilecek. İkinci defa çalıştırmayı denerseniz, “Bu kullanıcı veya eposta sistemde mevcut” hatasını görürsünüz.

Yukarıdaki koddan da anlaşılabileceği gibi, dönen hata kodu 23000 ise ( bu hata kodu mysql veritabanı ve pdo eklentisine özeldir, başka veritabanlarında bu hata kodu farklı olabilir) , kaydımızın tekrarlayan bir kayıt olduğunu anlayabiliyoruz.

Genelde ilk başladığımız zamanlarda , öncelikle o kaydı veritabanında arar, eğer yoksa kayıt işlemini yapardık. Ama artık daha efektif çözümler mevcut ve bu yöntemleri kullanarak daha kolay çözümler üretebiliriz.