2016-07-18 137 views
1

我想呼應出列用戶名的價值,並試圖像這樣:庫MySQLi返回錯誤的數據

public function username_exists($username) { 
    $conn = new mysqli($this->servername, $this->username, $this->password, $this->db_name); 
    $result = mysqli_query($conn, "SELECT username FROM fe_users WHERE username = $username"); 
    while ($row = mysqli_fetch_assoc($result)) { 
     echo $row["username"]; 
    } 
} 

當我運行這段代碼,由於某種原因,它總是返回字符串,這也存儲在我的數據庫中,但絕對不是列用戶名的值。爲什麼我會得到這個輸出,以及如何顯示存儲在表fe_users中的用戶名?

+2

1)字符串,如$用戶名需要被引用2)你的代碼是開放的SQL注入。利用mysqli的功能,並使用參數綁定。那麼你不需要擔心引用你的變量。 – aynber

回答

2

你需要引號$username

SELECT username FROM fe_users WHERE username = '$username'" 

更好地使用綁定,並準備發言。它會自動從SQL注入攻擊逃避你的字符串和免費

/* prepare statement */ 
$stmt = $conn->prepare("SELECT username FROM fe_users WHERE username = ?"); 
$stmt->bind_param('s', $username); 
$stmt->execute(); 

$stmt->bind_result($col1); 

/* fetch values */ 
while ($stmt->fetch()) { 
    printf("%s %s\n", $col1); 
} 

/* close statement */ 
$stmt->close(); 
+0

謝謝,但是當我使用你的代碼時,我得到這個錯誤:致命錯誤:在準備好'if(false === $ stmt){012} {0} { die('準備好之後調用非對象 – Reza

+0

上的成員函數bind_param ()失敗:'。htmlspecialchars($ mysqli-> error)); }'檢查錯誤 – Saty

+0

$ stmt已經爲真。我只需要從第一行的第一個參數中刪除'$ conn'。它現在效果很好。非常感謝! – Reza

0
$result = mysqli_query($conn, "SELECT username FROM fe_users WHERE username = '$username'"); 
+1

這不回答問題。這只是一個複製的問題。 – Machavity

+0

仔細觀察。這個版本雖然無法解釋,並且未加註釋,但卻在'$ username'周圍添加了單引號。 –