警告我的php文件。。
警告:mysql_query()[function.mysql query]:第25行C:\ Program Files\xampp\htdocs\shadaab\register.php中的用户“ODBC”@“localhost”(使用密码:NO)的访问被拒绝
警告:mysql_query()[function.mysql query]:无法在第25行的C:\ Program Files\xampp\htdocs\shadaab\register.php中建立到服务器的链接
用户“ODBC”@“localhost”的访问被拒绝(使用密码:否)
我的连接文件:

$localhost='localhost';
$username='root';
$password='';
$dbname='school';

$con=mysql_connect('$localhost','$username','$password');
mysql_select_db('$dbname',$con);

最佳答案

最终更新:
我打开了与阿迪蒂的聊天会话,我们在那里做了一些调试。
事实证明,问题是她已经从一个启用了短标记的服务器升级到了一个没有启用短标记的服务器。结果,她所有包含在短标记中的代码都没有被执行,这包括她的配置文件。
问题中的错误是由于未执行mysql_connect()函数,因为未执行整个文件。因此,依赖于该连接的调用失败。
在更正了她的短标记以使用fullmysql_query()标记之后,该文件被执行。正如在我对这个问题的最初回答中所讨论的,传递给<?php的变量周围的单引号最终确实导致了问题。建议删除这些单引号后,连接成功,问题得到解决。
对于任何相关方,可以找到整个调试会话here
第一次更新:
再仔细看一下,有两个部分不符合我最初的回答(我一直把它放在这个答案的底部,因为它仍然有一些好的信息)。
首先,错误是由mysql_connect()而不是mysql_query()触发的。这可能是因为连接周围没有错误处理,所以直到稍后才会注意到错误。尝试在连接周围添加一些错误处理:

if (!($con = mysql_connect('$localhost','$username','$password'))) {
  echo mysql_error();
}

if (!mysql_select_db('$dbname',$con)) {
  echo mysql_error();
}

在上面,一旦发生错误,就会显示错误。
我看到的第二件事是您正与mysql_connect()用户连接到localhost。如果错误是由上面显示的连接代码触发的,则这没有意义。如果您的问题是我在下面解释的单引号问题,您可以使用名为ODBC的用户登录,如果不是,则使用$username的用户登录。
看起来PHP正试图连接到PHP设置的默认凭据(可以在root文件中找到),而不是您提供的凭据。这让我相信你给我们展示的并不是被执行的。你确定你没有试图在代码中的其他地方连接吗?如果你是,我怀疑你的错误在于代码的那部分。
当您试图对空连接运行php.ini时,也可能(我必须检查),PHP正试图为您创建连接。不过,我可不指望。
我建议您尝试运行我在上面提供的更新代码,该代码使用mysql_query()函数在错误发生时显示错误。您甚至可以在这些块中添加一些自己的mysql_error()语句,以便进行一些老式的printf调试。
原始答案:
问题是,您将变量包装在单引号中。如果将它们用单引号括起来,PHP不会对变量的值求值。例如,不是将echo作为第二个参数传递,而是传递root。最后,您试图用一个名为$username的用户(密码为$localhost)登录到一个名为$username的服务器。
看看PHP documentation page for Strings。它解释了这一点:
注意:与双引号和heredoc语法不同,特殊字符的变量和转义序列在单引号字符串中出现时不会展开。
如果要在字符串中使用变量,则需要使用双引号,而不是单引号。然而,在这种情况下,您甚至不需要将这些变量用引号括起来,因为它们的值已经是字符串。你可以自己传递变量。试试这个:
$con=mysql_connect($localhost, $username, $password);
mysql_select_db($dbname, $con);

关于php - 在PHP中执行mysql_query时出现访问被拒绝错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7136269/

10-11 22:10
查看更多