无法让mysql_real_escape_string()正常工作

时间:2012-08-31 22:49:12

标签: php sql security sql-injection

为了防止sql注入,我尝试了这个:

$db = new myConnectDB();

$beerName = mysql_real_escape_string($beerName);
$beerID = mysql_real_escape_string($beerID);
$brewery = mysql_real_escape_string($brewery);
$style = mysql_real_escape_string($style);
$userID = mysql_real_escape_string($userID);
$abv = mysql_real_escape_string($abv);
$ibu = mysql_real_escape_string($ibu);
$breweryID = mysql_real_escape_string($breweryID);
$icon = mysql_real_escape_string($icon);


$beerName = addslashes($beerName);
$brewery = addslashes($brewery);
$brewery = str_replace('\'', '', $brewery);
$query3 = "INSERT INTO uniqueBeers (userID,beerID,beerName,beerStyle,beerBrewery,abv,ibu,breweryID,icon, brewIcon) VALUES ($userID, '$beerID', '$beerName', '$style' , '$brewery', '$abv','$ibu','$breweryID', '$icon', '$iconBrew')";
$db->query($query3);

但是我得到了各种各样的错误:

  

警告:mysql_real_escape_string()[function.mysql-real-escape-string]:拒绝用户访问

     

警告:mysql_real_escape_string()[function.mysql-real-escape-string]:拒绝用户访问

在阅读错误并在网上进行一些研究后,我注意到我可以通过连接并尝试了这个:

$beerName = mysql_real_escape_string($beerName,$db);

对于所有上述条目,但它也没有工作,所以现在我有点卡住了。

更新:

以下是我的数据库信息取出的myConnectDB的内容

<?php

class myConnectDB extends mysqli{

    public function __construct($hostname='localhost',  
        $user='',
        $password='', 
        $dbname=''){
        parent::__construct($hostname, $user, $password, $dbname);
    }
}
?>

2 个答案:

答案 0 :(得分:2)

您正在使用mysqli扩展来连接数据库(假设这是成功的),但您稍后在脚本中使用MySQL函数。等效的mysqli(程序)函数是mysqli_real_escape_string($dbLink,$stringToEscape) - 注意额外的i(对于Improved)。但是,你有一个mysqli对象,所以你应该使用面向对象的样式:

$beerName = $db->real_escape_string($beerName);  // OOP

此外,一旦您更正了上述内容,您就不需要以下代码行:

$beerName = addslashes($beerName);
$brewery = addslashes($brewery);
$brewery = str_replace('\'', '', $brewery);

答案 1 :(得分:1)

请检查您的功能顺序。 您需要首先拥有对数据库的有效访问权限。 该消息告诉您没有,并且代码显示您已经发现$db = new myConnectDB();,但您从未连接到数据库。