MySQL / Apache Ошибка в PHP MySQL запрос

Я получаю следующую ошибку:

Доступ запрещен для пользователя '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, не имеет разрешения. Я проверил оба. Я все еще могу выполнять свои другие запросы в другом месте программного обеспечения, и я проверил, что учетная запись имеет правильные разрешения.

5.08.2008 21:45:11
11 ОТВЕТОВ
РЕШЕНИЕ

И если это вообще имеет значение, apache @ localhost - это не имя учетной записи пользователя, которую я использую для входа в базу данных. У меня нет никаких учетных записей с именем apache в них вообще.

Если он говорит «apache @ localhost», имя пользователя неправильно передается в соединение MySQL. «apache» - это обычно пользователь, который запускает процесс httpd (по крайней мере, в системах на основе Redhat), и если имя пользователя не передается во время соединения, MySQL использует тот, кто вызывает соединение.

Если вы делаете соединение прямо в вашем скрипте, а не в вызываемом файле, вы получаете ту же ошибку?

12
6.08.2008 00:05:34

Просто чтобы проверить, если вы используете только эту часть, вы получаете ошибку?

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

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

Если это так, вы все равно получаете сообщение об ошибке, если вы копируете и вставляете один из этих вкладышей на эту страницу, я пытаюсь определить, является ли он локальным по отношению к странице или к той же строке.

Кроме того, вы можете опубликовать копию вызовов соединения (за исключением паролей), если только вставки не используют точно такой же синтаксис, как в этом примере.

1
7.02.2016 01:04:38

Требуется ли пользователю apache пароль для подключения к базе данных? Если это так, то тот факт, что он говорит «используя пароль: НЕТ», заставит меня поверить, что код пытается подключиться без пароля.

Однако, если пользователь apache не требует пароля, хорошей проверкой может быть двойная проверка разрешений (которую, как вы упоминали, вы уже проверили). Тем не менее, может быть полезно попробовать выполнить что-то вроде этого в приглашении mysql:

GRANT ALL PRIVILEGES ON `*databasename*`.* to 'apache'@'localhost';

Этот синтаксис должен быть правильным.

Кроме этого, я такой же тупой, как и вы.

1
22.02.2018 16:58:33
Я не думаю, что это действительно хорошее решение. Это все равно, что сказать, что если вы построили машину, в которой рулевое колесо падает, а люди падают на деревья, решение - убрать деревья. Это определенно проблема с неправильной инициализацией соединения.
nickf 15.09.2008 23:32:49

Если вы действительно можете вставить, используя те же вызовы подключения, ваша проблема, скорее всего, заключается в том, что пользователь «apache» не имеет разрешений SELECT для базы данных. Если у вас установлен phpMyAdmin, вы можете посмотреть разрешения для пользователя на панели привилегий. phpMyAdmin также позволяет очень легко изменять разрешения.

Если у вас есть доступ только к командной строке, вы можете проверить разрешения из базы данных mysql.

Вам, вероятно, нужно сделать что-то вроде:

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

1
5.08.2008 22:02:23

Просто чтобы проверить, если вы используете только эту часть, вы получаете ошибку?

Если это так, вы все равно получаете сообщение об ошибке, если вы копируете и вставляете одну из этих вставок в эту> страницу, я пытаюсь определить, является ли она локальной по отношению к странице или этой фактической строке.

Кроме того, вы можете опубликовать копию вызовов соединения (за исключением паролей), если вставки> не используют точно такой же синтаксис, как в этом примере.

Вот что находится в файле connection.php. Я связался с файлом через включение таким же образом, как и при выполнении запросов INSERT в другом месте кода.

$conn = mysql_connect("localhost", ******, ******) or die("Could not connect");
mysql_select_db("adbay_com_-_cms") or die("Could not select database");

Я попробую рабочий запрос INSERT в этой области, чтобы проверить это.

Что касается остальных постов о пароле доступа. Как я уже говорил в моей первой публикации, я проверил разрешения. Я использовал phpMyAdmin, чтобы проверить правильность разрешений для учетной записи пользователя, которую я использовал. И если это вообще имеет значение, apache @ localhost - это не имя учетной записи пользователя, которую я использую для входа в базу данных. У меня нет никаких учетных записей с именем apache в них вообще.

1
7.02.2016 01:04:51

Не забудьте проверить журналы ошибок базы данных. Вы должны быть в состоянии увидеть, если вы даже попали в БД. Если вы этого не сделаете, вы должны проверить свои правила брандмауэра на коробке. В окне linux вы можете запустить iptables -L, чтобы получить правила списка брандмауэров.

В противном случае это будет проблема чистого доступа. Сделайте «select * from mysql.user», чтобы увидеть, установлен ли там даже пользователь apache. Кроме того, я бы рекомендовал создать учетную запись специально для вашего приложения, а не использовать apache, поскольку любое другое приложение, которое вы создаете, будет работать как apache по умолчанию и может получить несанкционированный доступ к вашей базе данных.

Просто найдите «GRANT» в документации @ dev.mysql.com, чтобы получить больше информации. Если у вас есть более конкретные вопросы относительно БД, просто отредактируйте свой вопрос, и я посмотрю.

2
21.10.2008 17:53:03

Сценарий connect.php на самом деле устанавливает соединение или он просто определяет функцию, которую нужно вызвать для создания соединения? Ошибка, которую вы получаете, является симптомом отсутствия ранее установленного соединения.

ETA: также измените включение на требование. Я подозреваю, что это вообще не включает файл. Но включить может молча провалиться.

2
21.10.2008 17:57:06

Измените include () на require (). Если файл «connect.php» не может быть обязательным () d, скрипт завершится ошибкой с фатальной ошибкой, тогда как include () генерирует только предупреждение . Если имя пользователя, которое вы передаете mysql_connect (), не «apache», неправильный путь к сценарию подключения является наиболее распространенным способом получения ошибок такого типа.

4
21.10.2008 18:30:18

Чувак, ответ большой DUH! К сожалению, мне потребовалось время, чтобы понять это. Вероятно, у вас есть функция типа dbconnect (), и вы используете переменные из включаемого файла для установления соединения. $ conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass).

Хорошо, поскольку это внутри функции, переменные из включаемого файла должны быть переданы в функцию, иначе функция не будет знать, что такое $ dbhost, $ dbuser и $ dbpass. Чтобы это исправить, нужно сделать эти переменные глобальными, чтобы ваши функции могли их забрать. Другое решение, которое не очень безопасно, состоит в том, чтобы записать ваш хост, пользователя и передать функцию mysql_connect.

Надеюсь, это поможет, но у меня была такая же проблема.

2
2.03.2009 19:47:10
Спасибо! Я наконец-то все понял, и позже почувствовал себя огромным идиотом. Doh! Иногда у меня есть свои моменты, я думаю. Еще раз спасибо!
Mesidin 17.03.2009 21:26:12

Вы можете сделать одно из следующего:

  • Добавьте пользователя «apache» и настройте его привилегии из phpmyadmin или используя mysql в оболочке
  • Скажите php, чтобы он запускался mysql_connectот имени другого пользователя, того, у кого уже есть необходимые привилегии (но, возможно, он не root), поищите mysql.default_user в вашем файле php.ini.
1
8.09.2016 18:12:39

Вы не забыли сделать:

flush privileges;

Если пользователь не настроен, он выдаст ошибку «apache» @ «localhost».

1
19.09.2013 10:46:15
Вероятно, ваш ответ лучше дать в качестве комментария.
boisvert 19.09.2013 11:03:58