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

Posted

技术标签:

【中文标题】警告:mysql_real_escape_string():拒绝用户\'\'@\'localhost\'的访问(使用密码:否)【英文标题】:Warning: mysql_real_escape_string(): Access denied for user ''@'localhost' (using password: NO)警告:mysql_real_escape_string():拒绝用户''@'localhost'的访问(使用密码:否) 【发布时间】:2013-07-26 01:18:50 【问题描述】:

什么时候使用下面没有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);
 ?> 

【问题讨论】:

我经常看到这类问题,你应该阅读common database debugging for PHP and MySQL。 这些是您实际的数据库连接详细信息吗? 您是否考虑过使用准备好的语句而不是转义 $_POST 数据?您正在尝试转义 companyName,但随后您直接将 Posting['website'] 放入您的查询中。 没有实际值;只是愚弄当地人,直到我建造出实际的东西。我会看看准备好的陈述。我知道的不多,但是有人警告过我有关 mysql 注入的事情。谢谢你的帮助;爱这里的人。 谢谢 Jason,我确实首先阅读了一些关于此的帖子。将 mysqli_real_escape_string 与 mysql_real_escape_string 混合是一个新手错误,但我很高兴我做到了并了解了 mysql 注入,南海岸网络引导我准备好声明,thx south 【参考方案1】:

此处提供了一个可以解决此问题的工作代码示例:

http://www.w3schools.com/php/func_mysqli_real_escape_string.asp

【讨论】:

你为什么回答这个老问题? 我遇到了问题,遇到了这个帖子,所以决定把它留在这里,留给那些在谷歌上搜索相同内容的人。年龄与某些问题或多或少无关,这里的答案并没有以我可以理解的方式解决问题。我链接到的示例是更明显和明确的解决方案。【参考方案2】:

在使用警告前必须先连接数据库:mysql_real_escape_string()

【讨论】:

【参考方案3】:

您面临 MySQL 注入的风险。切勿在没有先进行某种投影的情况下将数据直接插入数据库。这是一个重大的安全风险。也使用 mysqli_real_escape_string 代替,并注意你的 $_POST[webSite] 是不受保护的。

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

【讨论】:

更改为 mysqli_real_escape_string 解决了问题。阅读 mysql 注入以保护数据库。谢谢 感谢您提醒我注意这些安全风险。 mysqli_real_escape_string 解决了这个问题,但我不知道 mysql 注入;谢谢。 mysqli_real_escape_string 是我的解决方案。没有意识到我在使用 mysqli 时必须使用它。有道理,因为它使用您打开的连接。【参考方案4】:

改用mysqli_real_escape_string

【讨论】:

【参考方案5】:

不,你不应该混合使用 mysql 和 mysqli。

在这里使用而不是mysql_real_escape_string($var):

$con->real_escape_string($var);

【讨论】:

以上是关于警告:mysql_real_escape_string():拒绝用户''@'localhost'的访问(使用密码:否)的主要内容,如果未能解决你的问题,请参考以下文章

怎么忽略KEIL的警告

IOS警告消除

Quick.db unwarn 命令取消警告成员中的所有警告

java程序中很多警告,如何修改掉?

将特定级别的所有警告视为错误,而不是下一级的警告

keil警告怎么办?