为了防止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_eescape_string()[function.mysql real-eescape-string]:拒绝用户访问
警告:mysql_real_eescape_string()[function.mysql real-eescape-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);
}
}
?>
您正在使用mysqli扩展来连接您的数据库(假设这是成功的),但您稍后在脚本中使用MySQL函数。等效的mysqli(procedureal)函数是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);
请检查函数的顺序。您需要首先拥有对数据库的有效访问权限。消息告诉您没有,代码显示您灌输了$db = new myConnectDB();
,但从未连接到数据库。