2016-02-11 125 views
0

即時通訊MySQL數據庫看似正確的查詢有問題。有問題的查詢是:PHP SQL數據庫查詢錯誤

「SELECT * FROM Users WHERE Email =」。$ email。「;」。查詢本身是 執行罰款,但被返回的$結果是假的(如果我 替換「電子郵件=」 $電子郵件。「」與「ID = 1」,它的工作原理,並返回一個 值)。

if($emailCheck = TRUE){ 
       echo "<script type='text/javascript'>alert('Email check true.');</script>"; 
       $sql = "SELECT * FROM Users WHERE Email =".$email.";"; 
       echo $sql; 
       $result = $conn->query($sql); 
       if ($result){ 
        $row = mysqli_fetch_array($result) ; 
        echo "<script type='text/javascript'>alert('".(string)$row['FirstName']."');</script>"; 
       } else { echo "<script type='text/javascript'>alert('bad result');</script>";} 
      } 

一些信息:

  • $ emailCheck = TRUE工作正常。

  • 當使用 「ID = 1」,而不是 「電子郵件=」 $電子郵件 「」 一切正常

  • 回聲$ SQL。;返回「SELECT * FROM Users WHERE Email = [email protected];」

任何幫助爲什麼當使用「電子郵件=」。$ email。「」時返回false結果爲false?

+2

嘗試 「電子郵件=」」。$電子郵件。」'「在MySQL需要 –

+0

字符串文字被引用,即。 'WHERE Email ='zxzx @ hotmail.com''。這將是對SQL注入讀了一個好時機,以及如何防止它使用預處理語句 - [我怎樣才能防止SQL注入的PHP?](http://stackoverflow.com/questions/60174/how-can -i-防止-SQL注入式-PHP) – Sean

+0

是感謝球員,我只是理解了它,dooe。 – DiscreteTomatoes

回答

0

這是因爲如果你正在使用的ID則是整數,所以沒必要把它放在引號(「」),但是如果你使用電子郵件那麼它是字符串,所以你需要把它寫在引號(「」)作爲遵循

$sql = "SELECT * FROM Users WHERE Email ='" . $email . "'";