2012-11-24 72 views
0

它有點難以解釋。我已經建立了可以正常工作的mysql函數,並且使用了mysql的折舊方法,我需要將此函數改爲使用mysqli而不是mysql方法。 我目前有:PHP mysql_real_escape_string();什麼是使用mysqli的正確方法?

$con = mysql_connect("host", "username", "pass"); 
mysql_select_db("db", $con); 
$Username = mysql_real_escape_string($_POST['user']); 
$Password = hash_hmac('sha512', $_POST['pass'], '&R4nD0m^'); 
$Query = mysql_query("SELECT COUNT(*) FROM users WHERE username = '{$Username}' AND password = '{$Password}'") or die(mysql_error()); 
    $Query_Res = mysql_fetch_array($Query, MYSQL_NUM); 
    if($Query_Res[0] === '1') 
    { 
     //add session 
     header('Location: newpage.php'); 
    } 
      else { 
       echo 'failed login'; 
      } 

現在我申請的mysqli這和它不返回任何數據或錯誤,但該功能將依然要求。

$log = new mysqli("host", "user", "pass"); 
$log->select_db("db"); 
$Username = $log->real_escape_string($_POST['user']); 
$Password = hash_hmac('sha512', $_POST['pass'], '&R4nD0m^'); 
$qu = $log->query("SELECT COUNT(*) FROM users WHERE username = '{$Username}' AND password = '{$Password}'"); 
    $res = $qu->fetch_array(); 
    if($res[0] === '1'){ 
     //add session 
     header('Location: newpage.php'); 
    } 
    else { 
     $Error = 'Failed login'; 
     sleep(0.5); 
    } 
    echo $res['username'].'    hello'; 
} 

但我不確定這是錯誤的原因。我知道這可能是一個簡單的回答

+0

PDO準備語句 –

+0

@E_p這就是我一直在尋找這個詞!謝謝 – sourRaspberri

+1

請使用PDO學習使用參數化查詢,而不是使用字符串轉義。它可以幫助您避免隨時逃脫字符串,因此您不會冒着忘記逃離字符串的風險。 http://bobby-tables.com/php.html顯示瞭如何做到這一點的例子。 –

回答

2

沒有問題,只是把它作爲一個答案:

http://php.net/manual/en/pdo.prepared-statements.php http://php.net/manual/en/pdo.prepare.php

例如

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)"); 
$stmt->bindParam(':name', $name); 
$stmt->bindParam(':value', $value); 
0

您可以檢查連接使用real_escape_string()

if ($log->connect_errno) { 
echo "Failed to connect to MySQL: (".$log->connect_errno.")".$log->connect_error; 
} 

據我所知之前建立,有一個與$log->real_escape_string($_POST['user']);

相關問題