Я получаю следующую ошибку:
Доступ запрещен для пользователя '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 @ localhost - это не имя учетной записи пользователя, которую я использую для входа в базу данных. У меня нет никаких учетных записей с именем apache в них вообще.
Если он говорит «apache @ localhost», имя пользователя неправильно передается в соединение MySQL. «apache» - это обычно пользователь, который запускает процесс httpd (по крайней мере, в системах на основе Redhat), и если имя пользователя не передается во время соединения, 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» не имеет разрешений SELECT для базы данных. Если у вас установлен phpMyAdmin, вы можете посмотреть разрешения для пользователя на панели привилегий. phpMyAdmin также позволяет очень легко изменять разрешения.
Если у вас есть доступ только к командной строке, вы можете проверить разрешения из базы данных mysql.
Вам, вероятно, нужно сделать что-то вроде:
GRANT SELECT ON myDatabase.myTable TO 'apache' @ 'localhost';
Просто чтобы проверить, если вы используете только эту часть, вы получаете ошибку?
Если это так, вы все равно получаете сообщение об ошибке, если вы копируете и вставляете одну из этих вставок в эту> страницу, я пытаюсь определить, является ли она локальной по отношению к странице или этой фактической строке.
Кроме того, вы можете опубликовать копию вызовов соединения (за исключением паролей), если вставки> не используют точно такой же синтаксис, как в этом примере.
Вот что находится в файле 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 в них вообще.
Не забудьте проверить журналы ошибок базы данных. Вы должны быть в состоянии увидеть, если вы даже попали в БД. Если вы этого не сделаете, вы должны проверить свои правила брандмауэра на коробке. В окне linux вы можете запустить iptables -L, чтобы получить правила списка брандмауэров.
В противном случае это будет проблема чистого доступа. Сделайте «select * from mysql.user», чтобы увидеть, установлен ли там даже пользователь apache. Кроме того, я бы рекомендовал создать учетную запись специально для вашего приложения, а не использовать apache, поскольку любое другое приложение, которое вы создаете, будет работать как apache по умолчанию и может получить несанкционированный доступ к вашей базе данных.
Просто найдите «GRANT» в документации @ dev.mysql.com, чтобы получить больше информации. Если у вас есть более конкретные вопросы относительно БД, просто отредактируйте свой вопрос, и я посмотрю.
Сценарий connect.php на самом деле устанавливает соединение или он просто определяет функцию, которую нужно вызвать для создания соединения? Ошибка, которую вы получаете, является симптомом отсутствия ранее установленного соединения.
ETA: также измените включение на требование. Я подозреваю, что это вообще не включает файл. Но включить может молча провалиться.
Измените include () на require (). Если файл «connect.php» не может быть обязательным () d, скрипт завершится ошибкой с фатальной ошибкой, тогда как include () генерирует только предупреждение . Если имя пользователя, которое вы передаете mysql_connect (), не «apache», неправильный путь к сценарию подключения является наиболее распространенным способом получения ошибок такого типа.
Чувак, ответ большой DUH! К сожалению, мне потребовалось время, чтобы понять это. Вероятно, у вас есть функция типа dbconnect (), и вы используете переменные из включаемого файла для установления соединения. $ conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass).
Хорошо, поскольку это внутри функции, переменные из включаемого файла должны быть переданы в функцию, иначе функция не будет знать, что такое $ dbhost, $ dbuser и $ dbpass. Чтобы это исправить, нужно сделать эти переменные глобальными, чтобы ваши функции могли их забрать. Другое решение, которое не очень безопасно, состоит в том, чтобы записать ваш хост, пользователя и передать функцию mysql_connect.
Надеюсь, это поможет, но у меня была такая же проблема.
Вы можете сделать одно из следующего:
- Добавьте пользователя «apache» и настройте его привилегии из phpmyadmin или используя mysql в оболочке
- Скажите php, чтобы он запускался
mysql_connect
от имени другого пользователя, того, у кого уже есть необходимые привилегии (но, возможно, он не root), поищите mysql.default_user в вашем файле php.ini.
Вы не забыли сделать:
flush privileges;
Если пользователь не настроен, он выдаст ошибку «apache» @ «localhost».