2017-02-22 106 views
0

例如重複的,我有一個表:PHP MYSQL防止基於某些列

ID FName LName Street  Number Phone Note 
1 John Smith 6th Ave 17  6465165 some random text 
2 Peter Murphy Barker Ave 22  6545213 some random text 
3 Michael Adams Centre St 34  5451351 some random text 

如何防止重複條目約翰·史密斯誰住在第六大道17,但允許某些約翰·史密斯誰住在迪沃大道例如?

我有更多的列,這,但我想避免僅根據FName參數,LName的,街道和號碼重複...

+0

給collums一個唯一的索引。 – Jer

回答

1

創建於FName參數,LName的,街道和號碼的唯一索引... 這將使該會插入一個重複的失敗的插入語句,那麼你就可以捕獲該異常在你的代碼,做一些事情,當出現這種情況.. 我已經更新了我的答案,包括一個PDO例如:

<?php 
$dbhost = "localhost"; 
$dbname = "pdo"; 
$dbusername = "root"; 
$dbpassword = "your password"; 

$link = new PDO("mysql:host=$dbhost;dbname=$dbname","$dbusername","$dbpassword"); 

$statement = $link->prepare("INSERT INTO testtable(fname, lname, street, number) 
     VALUES(:fname, :lname, :street, :number)"); 

try { 
    $statement->execute(
     array(
      'fname' => 'John', 
      'lname' => 'Smith', 
      'street' => '6th Ave', 
      'number' => '17', 
     ) 
    ); 
} catch (PDOException $e) { 
    if ($e->errorInfo[1] == 1062) { 
     // duplicate entry 
    } else { 
     //other error 
    } 
} 
+0

如何捕捉我的代碼中的異常?例如,要回顯「用戶存在!」? – shone83

+0

我做到了,謝謝! – shone83

+0

很高興我能幫上忙 –

0

第一步是在桌子上設置一個如下所示的唯一鍵:

ALTER TABLE table ADD UNIQUE KEY (FName,LName, Street, Number) 

然後使用INSERT IGNORE向其添加數據。任何導致這兩列中重複條目的INSERTS現在都會返回一個MySQL錯誤,而不是通過。

注意:INSERT聲明在使用UNIQUE後將被安靜地忽略。