2017-10-17 67 views
0

我試圖添加一個客戶到我創建的MySQL數據庫。 每當有人在網上商店訂購商品時,客戶就會被添加到數據庫中(我不想重複)。這裏是我的php代碼:插入MYSQL數據庫(如果不存在)

$sqlInsert = "INSERT INTO Customers (FirstName, Address, Phone) 
VALUES (".$userName.",".$address.",".$phone.")"; 

if(mysqli_query($conn, $sqlInsert)) { 
    echo "new member registered successfully!"; 
} else { 
    echo "Error: " . $sqlInsert . "<br>" . $mysqli_error($conn); 
} 

我已經看過查詢,如INSERT INTO ... WHERE NOT EXISTS。但我不明白我的情況的語法,並不知道它是否會起作用。 這裏是我的MySQL客戶表代碼:

CREATE TABLE IF NOT EXISTS Customers (
PersonID INT(11) NOT NULL AUTO_INCREMENT, 
Email VARCHAR(100), 
FirstName VARCHAR(100) NOT NULL, 
LastName VARCHAR(100), 
City VARCHAR(90), 
Zip INT(10), 
CustomerState VARCHAR(50), 
Address VARCHAR(200), 
Country VARCHAR(20), 
Phone VARCHAR(50) NOT NULL, 
PRIMARY KEY (PersonID) 
); 
+1

瞭解準備語句以防止sql注入 – Jens

+0

什麼是獨特的價值?名稱不是唯一的。是電話號碼嗎? – BRjava

回答

5
INSERT INTO Customers (FirstName, Address, Phone) 
SELECT * FROM (SELECT '$firstName', '$address', '$phone') AS tmp 
WHERE NOT EXISTS (
    SELECT FirstName from Customers WHERE FirstName= '$firstName' 
) LIMIT 1; 

這將防止基於第一名稱,你可以使用所有這些列的檢查,我想匹配列應該是電子郵件,您可以使用。

我只是在查詢中添加了參數,以便獲得一個想法,使用參數綁定來避免sql注入。

OR

select * from customers where .... // 

獲取結果集的大小,如果size > 0這意味着有一個排了,所以不要將其插入。

Sql語句取自MySQL: Insert record if not exists in table並修改。

+0

很好的解釋@Danyal – Nawin

+0

謝謝:) @Nawin –

0

嘗試插入前選擇查詢並檢查行...嘗試使用Mysqli Prepared語句。我這樣做你的代碼...

<?php 
    $sqlselect = "SELECT * FROM Customers WHERE FirstName = ".$userName." AND Address = ".$address." AND Phone = ".$phone; 
    $exqry = mysqli_query($conn, $sqlselect); 
    $cnt = count($exqry); 
    if($cnt == 0){ 
     $sqlInsert = "INSERT INTO Customers (FirstName, Address, Phone) 
     VALUES (".$userName.",".$address.",".$phone.")"; 

     if(mysqli_query($conn, $sqlInsert)) { 
     echo "new member registered successfully!"; 
     } else { 
     echo "Error: " . $sqlInsert . "<br>" . $mysqli_error($conn); 
     } 
    }else{ 
echo "Member already in table."; 
//do your update or other stuff. 
} 
    ?>