2015-12-08 53 views
0

嗨我需要一個函數什麼檢查用戶是否已經存在於我的分貝。 我需要這個具體原因。 此時該函數總是返回false。 有人在代碼中看到我的錯誤嗎?PHP準備語句無法找到錯誤

function checkForUserExists($username){ 
    $mysqli = new mysqli("****", "****", "****", "****"); 

     if($stmt = $mysqli->prepare("SELECT * FROM users WHERE ign = ?")){ 
     $stmt->bind_param("s", $username);   
     }else{ 

     } 

     $stmt->execute(); 

     $stmt->bind_result($ign); 

    if($ign == $username){ 
     return false; 
    }else{ 
     return true; 
    } 
    $stmt->close(); 

} 

UPDATE

$mysqli = new mysqli("**", "*", "**", "**"); 
    $username = "Felipebuy"; 
    if($username && $stmt = $mysqli->prepare("SELECT ign FROM `users` WHERE `ign` = ?")){ 
     $stmt->bind_param("s", $username); 
     $stmt->execute(); 
     $stmt->bind_result($ign); 
     $stmt->close(); 

     if($ign == $username){ 

     echo "equals"; 
     }else{ 
      echo "does not equal eachoter"; 
     } 
    } 

它只是回聲的 「不等於eachoter」

+1

檢查錯誤,s'all我可以說 –

+1

'如果($ IGN == $的用戶名){ 返回FALSE;'不應該說是 「真」?看起來是這麼回事。如果找到,則爲true。如果不是,則爲false。這只是合乎邏輯的。 –

+0

'$ stmt-> close(); return語句後的代碼永遠不會被執行。你也許想獲取你的數據('$ stmt-> fetch()')。 – Rizier123

回答

2

做了一個小小的更正,對延遲道歉 - 不得不睡覺。

function checkForUserExists($username=false){ 
     $mysqli = new mysqli("****", "****", "****", "****"); 

     if($username && $stmt = $mysqli->prepare("SELECT `ign` FROM `users` WHERE `ign` = ?")){ 
      $stmt->bind_param("s", $username); 
      $res=$stmt->execute(); 

      if($res){ 
       $stmt->bind_result($ign); 
       $stmt->fetch(); 
       $stmt->close(); 
       $mysqli->close(); 

       return $ign === $username; 
      } 
     } 
     return false; 
    } 

    $result=call_user_func('checkForUserExists','Felipebuy'); 
    echo $result ? 'equals' : 'not equal to each other'; 
+0

我已經編輯我的文章與新代碼 你有沒有其他的想法? – Casper

+0

謝謝,你的答案我能夠得到它的工作 唯一的事情是我的情況在你的代碼中是錯誤的是,你選擇所有和如果整行等於$ username,那麼在你徹底清除之後 但是,非常感謝你讓我有些mysqli結構清晰 – Casper

+1

斑點 - 我在編輯時忘記了這裏的轉換; / – RamRaider

1

您可以選擇在你的語句中的所有(*)。除非您的表格只包含一列,否則會輸出多個值。如果將該結果($ ign)與單個值($ username)進行比較,則很可能永遠不會返回true。