2017-01-22 179 views
1

當我嘗試爲登錄系統執行mysql_real_escape_string時,它不會記錄表單中的變量。如果我做mysql_real_escape_string不適用於我

$username = $_POST['username']; 

和回聲,它顯示,但是當我做

$username = mysql_real_escape_string($_POST['username']); 

,並呼應它,它不會顯示。我也測試了數據庫連接,他們工作。這是我的代碼:

session_start(); 
$db = mysqli_connect($connection, $user, $pass, $database); 
if (isset($_POST['submit'])) { 
    $username = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string($_POST['password']); 
    echo $username; 

    $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'"; 
    echo $sql; 
    $result = mysqli_query($sql, $db); 

它曾經工作過,但由於某種原因,它突然停止工作。 任何幫助表示讚賞。 :)

+0

你必須傳遞connrction對象..'mysql_real_escape_string($ connection_object,$ _ POST ['username']);' –

回答

4

首先,你不應該逃避數據構建查詢。你應該使用準備好的語句。見How can I prevent SQL injection in PHP?

這就是說,你的問題是你使用mysql_real_escape_string(),但你有一個mysqli(不是mysql)連接。 mysqlimysql是不同的擴展名。請don't use mysql_*; mysql_*功能已過時,deprecated,並且不安全 - 它們已從現代版本的PHP(版本7.0和更高版本)中完全刪除。改爲使用MySQLiPDO

要解決您的問題暫時,請使用mysqli_real_escape_string()而不是mysql_real_escape_string()。要永久和正確地修復它,請使用預準備語句並且不要轉義。

+0

我試過使用mysqli,但它仍然無法工作。我做了'mysqli_real_escape_string($ _ POST ['username']);'但仍然沒有。 –

+1

@FranciscoF。注意參數:'string mysqli_real_escape_string(mysqli $ link,string $ escapestr)'。在你的情況下,第一個參數應該是'$ db'。所以,實際的行是'$ username = mysqli_real_escape_string($ db,$ _POST ['username']);'。 –

+1

所以它會是'mysqli_real_escape_string($ db,$ _POST ['username'])'? –