警告: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'的访问(使用密码:否)的主要内容,如果未能解决你的问题,请参考以下文章