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

голоса
23

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

не Доступ закрыт для пользователя «Апач» @ «локальный» (используя пароль: НЕТ)

При использовании следующего кода:

<?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 IGNORE запросами в другой части программного обеспечения. Если я закомментируйте $result = mysql_queryстроку, то она проходит через к утверждению другого. Таким образом, это то , что линия или содержание в КРП.

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

Задан 05/08/2008 в 22:45
источник пользователем
На других языках...                            


11 ответов

голоса
10

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

Если он говорит «Апач @ локальный» имя пользователя, не получает правильно передается в связи с MySQL. «Апач», как правило, пользователь, который запускает процесс HTTPd (по крайней мере, на системах Redhat основы), и если имя пользователя не передаются во время соединения MySQL использует кого зовет для подключения.

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

Ответил 06/08/2008 d 01:05
источник пользователем

голоса
4

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

Ответил 21/10/2008 d 19:30
источник пользователем

голоса
2

Чувак ответ большой ДУХ! который, к сожалению, мне потребовалось некоторое время, чтобы выяснить, как хорошо. Вы, вероятно, имеют функцию, как БДСВЯЗЬ (), и вы используете переменные из включаемого файла, чтобы сделать соединение. $ Сопп = mysql_connect ($ DBHost, $ DbUser, $ DBPass).

Ну так это внутри функции переменные из включаемого файла должны быть переданы функции или еще функции не будут знать, что $ DBHost, $ DbUser и $ DBPass есть. Способ исправить это, чтобы сделать эти переменные глобальные, так что ваши функции могут забрать их. Еще одно решение, которое не является очень безопасным будет выписывать вам хост, пользователь и передать функции mysql_connect.

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

Ответил 02/03/2009 d 20:47
источник пользователем

голоса
2

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

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

Ответил 21/10/2008 d 18:57
источник пользователем

голоса
2

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

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

Просто посмотрите на «ГРАНТ» в документации @ dev.mysql.com, чтобы получить больше информации. Если у вас есть более конкретные questiosn относительно дб, просто изменить свой вопрос, и я буду смотреть.

Ответил 21/10/2008 d 18:53
источник пользователем

голоса
2

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

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

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

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

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

Ответил 05/08/2008 d 22:56
источник пользователем

голоса
2

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

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

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

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

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

Ответил 05/08/2008 d 22:52
источник пользователем

голоса
1

Возможно, вы помните, чтобы сделать:

flush privileges;

Если пользователь не установлен, то это даст «Апач» @ «локальный» ошибка.

Ответил 19/09/2013 d 11:46
источник пользователем

голоса
1

Вы можете выполнить одно из следующих действий:

  • Добавьте пользователя «Апач» и настройка его привилегии от PHPMyAdmin или с использованием MySQL на раковине
  • Скажите PHP для работы в mysql_connectкачестве другого пользователя, кто - то , кто уже имеет привилегии необходимо (но , возможно , не корень), искать mysql.default_user в файле php.ini.
Ответил 21/06/2009 d 22:06
источник пользователем

голоса
1

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

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

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

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

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

Я буду стараться рабочим ВСТАВИТЬ ИГНОРИРУЙТЕ запрос в этой области, чтобы проверить это.

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

Ответил 05/08/2008 d 23:40
источник пользователем

голоса
1

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

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

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

ГРАНТ Выберите значение ON myDatabase.myTable TO 'Апач' @ 'локальный';

Ответил 05/08/2008 d 23:02
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more