2014-01-29 41 views
2

我有一個用戶輸入一個想要的名字,然後檢查數據庫,看看它是否存在之前,我做到了。它雖然不能正常工作,但有時它會迴應正確的東西,有時候不會。PHP如何檢查一個字符串表中是否已經存在一個MySQL表

$makeName = $_POST["userName"]; 
$nameFind = "SELECT userName FROM usertable WHERE userName = $makeName"; 
$nameCompare = mysqli_query($con, $nameFind); 

if($nameCompare == false) 
{ 
    echo "This is a new name"; 
} 
else 
{ 
    echo "Pick a new name please"; 
} 
+1

[RTFM:'mysqli_query'(http://www.php.net/manual/en/mysqli.query.php)*不*返回一個布爾表示的行計數 - 如果返回false則返回錯誤,否則返回「result」對象。 (此外,查詢將始終失敗,因爲SQL文本可能肯定無效; [*檢查錯誤*](http://www.php.net/manual/en/mysqli.error.php)。) – user2864740

+2

你需要對行進行計數,您目前只是看到查詢是否成功執行 – cmorrissey

+0

Google SQL注入。至少在**和**中引用查詢中的字符串,但最好使用預先準備好的語句。 – Wrikken

回答

3

,只是因爲它不返回行的查詢不會失敗。用mysqli_num_rows()找出是否匹配。

而且xkcd
xkcd

0

使用引號和轉義:

"select userName FROM usertable WHERE userName = '" . mysqli_real_escape_string($makeName) . "'"

然後用mysqli_num_rows()

$result = mysqli_query($query); $num_rows = mysqli_num_rows($result);

0
if(mysqli_num_rows($nameCompare)) 
{ 
    echo "Pick a new name please"; 
} 
else 
{ 
    echo "This is a new name"; 
} 

這將檢查的結果,如果有一個排,它已被使用。

2

不要那樣做。

相反,

  1. 創建在列 「用戶名」 的唯一約束。
  2. 插入用戶所需的名稱。
  3. 當所需的名稱已經存在時,捕獲錯誤。

爲什麼?您的方法總是需要兩次往返數據庫,並且不會導致錯誤。無論如何你必須捕捉錯誤;插入語句有很多可能出錯的地方。

0

你需要兩個查詢該反正

$username = mysqli_real_escape_string($con,$username); 


$query = "SELECT * FROM tbl_login WHERE username='$username'"; 
$result = mysqli_query($con,$query)or die(mysqli_error()); 
$num_row = mysqli_num_rows($result); 

    $row=mysqli_fetch_array($result); 
    if($num_row ==1) { 

     echo 'false';   
    } 
    else{  
       $query_insert = "INSERT INTO login (username, password)VALUES ('$username','$password');"; 

      $result = mysqli_query($con,$query_insert) or die(mysqli_error()); 
      } 
相關問題