-2

为了防止 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);
    }
}
?>
4

2 回答 2

2

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

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

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

$beerName = addslashes($beerName);
$brewery = addslashes($brewery);
$brewery = str_replace('\'', '', $brewery);
于 2012-08-31T23:01:51.587 回答
1

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

于 2012-08-31T22:55:16.987 回答