2016-07-31 80 views
1

我想在我的表中創建一個唯一的值列,並使用php來檢查值是否已插入到表中。例如,一個用戶名不能使用兩次。 我試圖使用SELECT從數據庫中獲取值,但它不起作用。 當我試圖呼應,從表像值:如何使用php來避免數據庫重複?

echo $conn->query("SELECT DISTINCT Username 
FROM UserDetail;"); 

它說: 開捕致命錯誤:類mysqli_result的對象無法轉換爲字符串

+0

的可能的複製[如何「插入如果不存在」在MySQL?(http://stackoverflow.com/questions/1361340/how-to-insert-if-未存在,在MySQL的) – revo

回答

1

這個問題不應該在PHP中得到解決因爲這是一個數據庫設計問題。相反,您想要更改UserDetail表,以便數據庫將拒絕試圖插入副本的任何查詢。這是查詢運行:

$sql = 'ALTER TABLE UserDetail ADD UNIQUE INDEX (`Username`)'; 
$result = $conn->query($sql); 

if($result) echo 'Success!'; 
else echo $conn->error; 

一旦你這樣做成功,這將是不可能的,進入該表中重複Username值;該查詢將不會執行並會產生錯誤。

我們避免錯誤,當你的腳本試圖插入一個已經存在的用戶名,你的插入查詢更改從INSERTINSERT IGNORE

$sql = "INSERT IGNORE INTO UserDetail SET Username='$escaped_new_username'"; 
$result = $conn->query($sql); 

順便說你的代碼會失敗,因爲你想呼應結果是$conn->query,但它不是一個字符串。以顯示DB結果的步驟是:

  1. 運行查詢(你沒有)
  2. 確認沒有錯誤的檢查結果不是false
  3. 通過執行fetchfetch_assocfetch_array或抓取結果一些這樣的方法對結果
  4. 使用或顯示您提取的內容。

    查看您正在使用的數據庫驅動程序的文檔。最常見的是MySQLiPDO_MySQL