query - php mysql是什麼




MySQL中的MySQL/Apache错误MySQL查询 (8)

我收到以下错误:

拒绝访问用户'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.";
}
?>

connect.php文件包含我的MySQL连接调用,这些调用在我的INSERT查询中可以正常工作。 如果我注释掉$result = mysql_query行,那么它会通过else语句。 那么,这是在线还是在if的内容。

我一直在寻找任何解决方案的网络,大多数似乎与MySQL连接太多有关,或者我登录到MySQL的用户没有权限。 我已经检查了两个。 我仍然可以在软件的其他地方执行我的其他查询,并验证了该帐户具有正确的权限。


apache用户是否需要密码才能连接到数据库? 如果是这样,那么它说“使用密码:否”的事实会导致我相信代码试图连接没有密码。

但是,如果apache用户不需要密码,那么仔细检查权限可能是一个好主意(你提到你已经选中了)。 在mysql提示符下尝试执行这样的操作可能还是有好处的:

.* to 'apache'@'localhost'; 数据库名 .* to 'apache'@'localhost'; GRANT ALL PRIVILEGES ON .* to 'apache'@'localhost';

该语法应该是正确的。

除此之外,我就像你一样难住。


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

如果你只能访问命令行,你可以从mysql数据库中检查权限。

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

GRANT SELECT on myDatabase.myTable TO'apache'@'localhost';


connect.php脚本实际上是建立连接还是仅仅定义一个你需要调用来创建连接的函数呢? 你得到的错误是根本没有以前建立的连接的症状。

ETA:也将包含更改为要求。 我怀疑它实际上并不包括文件。 但包括可以默默地失败。


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

否则,这将是一个纯粹的访问问题。 做一个“select * from mysql.user”来查看apache用户是否设置在那里。 此外,我建议创建一个专门为您的应用程序的帐户,而不是使用Apache,因为你创建的任何其他应用程序默认情况下将运行为Apache,并可能未经授权访问您的数据库。

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


伙计的答案是一个大的杜哈! 不幸的是,我花了一段时间才弄清楚。 您可能有一个像dbconnect()这样的函数,并且您正在使用包含文件中的变量来建立连接。 $ conn = mysql_connect($ dbhost,$ dbuser,$ dbpass)。

那么,因为这是一个函数内的函数,包含文件的变量需要传递给函数,否则函数将不知道$ dbhost,$ dbuser和$ dbpass是什么。 一个解决这个问题的方法是使这些变量成为全局的,这样你的函数就可以把它们接收起 另一个不太安全的解决方案是写出你的主机,用户名和传入mysql_connect函数。

希望这可以帮助,但我有同样的问题。


你记得做了吗:

flush privileges;

如果用户没有设置,那么会出现'apache'@'localhost'错误。


只是为了检查,如果你使用这个部分,你会得到一个错误?

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

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

如果是这样,如果您复制并粘贴其中一个插入到这个页面,你还是会得到一个错误,我想看看它是本地的页面还是实际的行。

另外,你可以发布一个连接调用副本(减去密码),除非插入的语法和这个例子完全一样。


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

  • 添加用户“apache”,并从phpmyadmin设置其权限或在shell上使用mysql
  • 告诉php运行mysql_connect作为另一个用户,已经拥有所需权限(但可能不是root)的人,请在你的php.ini文件中查找mysql.default_user。




mysql