PHP MySQL查询中的MySQL/Apache错误

PHP MySQL查询中的MySQL/Apache错误,php,mysql,apache,Php,Mysql,Apache,我得到以下错误: 用户“apache”@“localhost”的访问被拒绝(使用密码:否) 使用以下代码时: <?php include("../includes/connect.php"); $query = "SELECT * from story"; $result = mysql_query($query) or die(mysql_error()); echo "<h1>Delete Story</h1>"; if (mysql_num_rows

我得到以下错误:

用户“apache”@“localhost”的访问被拒绝(使用密码:否)

使用以下代码时:

<?php

include("../includes/connect.php");

$query = "SELECT * from story";

$result = mysql_query($query) or die(mysql_error());

echo "<h1>Delete Story</h1>";

if (mysql_num_rows($result) > 0) {
    while($row = mysql_fetch_row($result)){
          echo '<b>'.$row[1].'</b><span align="right"><a href="../process/delete_story.php?id='.$row[0].'">Delete</a></span>';
      echo '<br /><i>'.$row[2].'</i>';
    }
}
else {
   echo "No stories available.";
}
?>

php
connect.php
文件包含mysqlconnect调用,这些调用可以很好地处理软件另一部分中的
INSERT
查询。如果我注释掉
$result=mysql\u query
行,那么它将转到else语句。因此,它是if中的那一行或内容


我一直在网上搜索任何解决方案,大多数似乎与太多MySQL连接有关,或者我登录MySQL的用户没有权限。我都查过了。我仍然可以在软件中的其他地方执行我的其他查询,并且我已经验证了该帐户是否具有正确的权限。

只是为了检查,如果您使用只是这部分,您是否会出错

<?php
include("../includes/connect.php");

$query = "SELECT * from story";
$result = mysql_query($query) or die(mysql_error());

apache用户需要密码才能连接到数据库吗?如果是这样的话,那么它说“使用密码:否”这一事实会让我相信代码试图在没有密码的情况下进行连接

但是,如果apache用户不需要密码,那么仔细检查权限可能是一个好主意(您提到过,您已经检查过了)。尝试在mysql提示符下执行类似的操作可能仍然是有益的:

GRANT ALL PRIVILEGES ON `*databasename*`.* to 'apache'@'localhost';
这种语法应该是正确的


除此之外,我和您一样感到困惑。

如果您确实能够使用相同的连接调用插入,那么您的问题很可能在于用户“apache”对数据库没有选择权限。如果已安装phpMyAdmin,则可以在“权限”窗格中查看该用户的权限。phpMyAdmin还使修改权限变得非常容易

如果您只能访问命令行,则可以检查mysql数据库的权限

您可能需要执行以下操作:

将myDatabase.myTable上的SELECT授予“apache”@“localhost”;
只是为了检查一下,如果你只使用这个部件,你会得到一个错误吗

<?php
include("../includes/connect.php");

$query = "SELECT * from story";
$result = mysql_query($query) or die(mysql_error());
如果是这样,您是否仍然会收到错误如果您将其中一个插入复制并粘贴到此>页面,我将尝试查看它是否位于页面或实际行的本地

另外,您可以发布连接调用的副本(减去密码),除非inserts>使用与本例完全相同的语法

下面是connection.php文件中的内容。我通过include链接到该文件,其方式与我在代码中其他地方执行INSERT查询的方式相同

$conn = mysql_connect("localhost", ******, ******) or die("Could not connect");
mysql_select_db("adbay_com_-_cms") or die("Could not select database");
我将尝试在此区域中的工作插入查询来检查它

至于其他关于密码访问的帖子。正如我在第一篇帖子中所说,我确实检查了权限。我使用phpMyAdmin来验证我使用的用户帐户的权限是否正确。如果有什么关系的话,apache@localhost不是用于进入数据库的用户帐户的名称。我根本没有任何名为apache的用户帐户

如果有什么关系的话,apache@localhost不是用于进入数据库的用户帐户的名称。我根本没有任何名为apache的用户帐户

如果它在说'apache@localhost'用户名未正确传递到MySQL连接。'apache’通常是运行httpd进程的用户(至少在基于Redhat的系统上),如果在连接过程中没有传递用户名,MySQL将使用调用连接的用户


如果您在脚本中正确连接,而不是在调用的文件中,是否会出现相同的错误?

不要忘记检查数据库错误日志。你应该能够看到你是否甚至击中了DB。如果您没有,您应该检查方框中的防火墙规则。在linux机器上,您可以运行iptables-L来获取防火墙列表规则

否则,这将是一个纯粹的访问问题。执行“select*fromMySQL.user”以查看apache用户是否已在其中设置。此外,我建议专门为您的应用程序创建一个帐户,而不是使用apache,因为您创建的任何其他应用程序在默认情况下都将作为apache运行,并且可能会获得对数据库的未经授权访问


只需在文档@dev.mysql.com中查找“GRANT”即可获得更多信息。如果您有关于db的更具体的问题,只需编辑您的问题,我会看一看。

connect.php脚本是否真正建立了连接,还是仅仅定义了创建连接所需调用的函数?您所遇到的错误是之前根本没有建立连接的症状


ETA:同时将包含更改为要求。我怀疑它实际上根本不包括这个文件。但是include可能会以静默方式失败。

将include()更改为require()如果无法使用require()d创建“connect.php”文件,脚本将失败,并出现致命错误,而include()只会生成警告。如果传递给mysql_connect()的用户名不是“apache”,则连接脚本的路径不正确是导致此类错误的最常见方式。

都德答案是一个大傻瓜!不幸的是,我也花了一段时间才弄明白。您可能有一个类似于dbconnect()的函数,并且正在使用包含文件中的变量进行连接$conn=mysql\u connect($dbhost、$dbuser、$dbpass)

因为这是在函数内部,所以需要将include文件中的变量传递给函数,否则函数将不知道$dbhost、$dbuser和$dbpass是什么。解决这一问题的一种方法是将这些变量设置为全局变量,以便您的函数可以拾取它们。另一个不太安全的解决方案是写出主机、用户并传入mysql_connect函数


希望这有帮助,但我也遇到了同样的问题。

您可以执行以下操作之一:

    <