警告:mysql_real_escape_string():用户''@'localhost'被拒绝访问(使用密码:NO)

6

如果没有使用mysql_real_escape_string,下面的代码将正常工作。我只是试图从输入表单中获取一个可能包含撇号的文本字符串,并将其格式化以放入mysql表中。

    <?php
    $filenamee = $_FILES["file"]["name"];
    $filename =strval($filenamee);
    echo "file name is".$filename;

     $con=mysqli_connect("localhost","blasbott_admin","lubu1973","blasbott_upload");
     // Check connection
     if (mysqli_connect_errno())
       {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
   }
 $companyName = mysql_real_escape_string($_POST['companyName']);
// $companyName = mysql_real_escape_string($companyNamee);
 //$companyName = mysql_real_escape_string($companyNamee);

$sql="INSERT INTO ads (companyName, webSite, picture)
 VALUES ('$companyName','$_POST[webSite]','$filename')";

if (!mysqli_query($con,$sql))
   {
   die('Error: ' . mysqli_error($con));
   }
   echo"<br>";
 echo "1 record added";

mysqli_close($con);
 ?> 

我经常看到这种类型的问题,你应该阅读《PHP和MySQL常见数据库调试》(http://jason.pureconcepts.net/2013/04/common-debugging-php-mysql/)。 - Jason McCreary
10
那些是你实际的数据库连接细节吗? - andrewsi
你有没有想过使用预处理语句来代替转义$ _POST数据?你试图转义公司名称,但是你直接将Posting['website']插入到查询中。 - South Coast Web
只是在本地测试,直到我构建出实际的东西。我会看一下预处理语句。虽然我不太懂,但有人警告我要注意MySQL注入问题。感谢你们的帮助,我喜欢这里的人们。 - Dennis1973
谢谢Jason,我先读了几篇文章。这是一个初学者的错误,混淆了mysqli_real_escape_string和mysql_real_escape_string。不过我很高兴犯了这个错误并学到了有关MySQL注入的知识,South Coast Web让我了解到了prepared statements。谢谢South。 - Dennis1973
5个回答

9
不应该混用mysql和mysqli,可以使用以下替代方案来代替mysql_real_escape_string($var):
$con->real_escape_string($var);

6

您面临MySQL注入的风险。在向数据库插入数据之前,绝不能直接插入,必须先进行某种形式的保护。这是一个重大的安全风险。同时,请使用mysqli_real_escape_string,注意您的$_POST[webSite]没有受到保护。

此外,您的错误意味着您的数据库详细信息不正确。


将代码更改为mysqli_real_escape_string解决了问题。阅读有关MySQL注入以保护数据库的内容。谢谢。 - Dennis1973
感谢您提醒我那些安全风险。mysqli_real_escape_string解决了问题,但我之前不知道mysql注入的问题,非常感谢。 - Dennis1973
mysqli_real_escape_string 对我来说是解决方法。当我使用 mysqli 时,没有意识到必须使用它。但这很有道理,因为它使用了你打开的连接。 - earl3s

2

在使用Warning: mysql_real_escape_string()之前,您必须先连接到数据库。


2

你为什么回答这个老问题? - student
1
我曾经遇到过这个问题,后来在这个帖子里找到了答案,所以决定把它留在这里,供那些在谷歌搜索同样问题时来到这里的人参考。对于某些问题来说,年龄或多或少是无关紧要的,而这里的答案并没有以一种我能理解的方式解决问题。我提供的示例更加明显和明确。 - Maija Vilkina

0

尝试使用 mysqli_real_escape_string


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接