2012-11-24 27 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']);

相关问题