2013-06-13 112 views
0

我知道有這個話題在網站上公佈各種提供的解決方案中是否存在記錄,我檢查(並用),其中的一些解決方案。儘管如此,我不明白爲什麼我的代碼不起作用,可能是因爲我是一個關於PHP和SQL編程的入門者;-(檢查數據庫

該代碼應該添加一個包含3個字段的記錄(FirstName ,姓氏,年齡)表中的(人),但只有在記錄不存在,因此在執行上存在的名字和姓氏字段的支票。但在現有記錄的情況下,如果語句的條件似乎仍是真正的和現有記錄的副本仍然是插入到數據庫中。我該怎麼提前幫助錯過?

感謝。

    //check whether item does not exist in database 
     $query ="SELECT FirstName,LastName FROM persons 
     WHERE FirstName='$data[1]' AND LastName='$data[2]'"; 
     $result = mysql_query($query); 
     if($result && mysql_num_rows($result) > 0) 
     { 
      echo " <br> record exist"; 
     } 
     else 
     { 
     $theage = (int)$data[3]; //! for conversion of integer values 
       $sql="INSERT INTO persons (FirstName, LastName, Age) 
       VALUES ('$data[1]','$data[2]','$theage')"; 
     if (!mysqli_query($con,$sql)) 
      { 
       die('Error: ' . mysqli_error($con)); 
      } 
     } 
+0

'SELECT COUNT(*)FROM人員 WHERE姓= '$數據[1]' AND名字= '$數據[2]'' – NINCOMPOOP

+0

@TheNewIdiot OP使用'mysqli'和'mysql'都爲每個查詢。 –

+0

爲什麼你需要先檢查? – Strawberry

回答

2

你必須使用周圍數組值{}查詢

$query ="SELECT FirstName,LastName FROM persons 
WHERE FirstName='{$data[1]}' AND LastName='{$data[2]}'"; 

而且你INSERT查詢上mysqli運行,並SELECT查詢上mysql運行。您必須僅使用1個,並且使用以下代碼mysqli

$result = mysqli_query($con,$query); 
if($result && mysqli_num_rows($result) > 0) 
{ 
    echo " <br> record exist"; 
} 
+0

您的解決方案有效,非常感謝! – user165259

+0

@ user165259接受的答案是很好的習慣,當它解決您的問題。 :) –

+0

@ user165259歡迎。 :) –

1

可能是這個查詢將幫助您:

INSERT INTO persons (FirstName, LastName, Age) 
SELECT * FROM (SELECT FirstName,LastName) AS tmp 
WHERE NOT EXISTS (
    SELECT FirstName, LastName FROM persons WHERE WHERE FirstName='$data[1]' AND LastName='$data[2]' 
) LIMIT 1; 
0

檢查您的網絡連接 在第一個查詢你在插入時使用 的mysql_query

然後在第二種情況下,你使用 mysqli_query

0

從數據庫的角度來看,通過設置UNI修改Person表的設計QUE KEY進行必要的領域,即:

CREATE TABLE `Persons` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `FirstName` varchar(255) NOT NULL, 
    `LastName` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `unique_FirstName_LastName` (`FirstName`,`LastName`) USING BTREE 
    )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; 

做一個正常的插入,處理重複錯誤

[Err] 1062 - Duplicate entry 'jk-kenneth' for key 'unique_FirstName_LastName'