MySQL / Apache Fehler in PHP MySQL-Abfrage

stimmen
23

Ich erhalte die folgende Fehlermeldung:

Zugriff verweigert für Benutzer ‚Apache‘ @ ‚localhost‘ (mit Passwort: Nein)

Wenn mit dem folgenden Code:

<?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.;
}
?>

Die connect.phpDatei enthält meine MySQL Anrufe verbinden , die gut mit meinen arbeiten INSERT IGNORE Abfragen in einem anderen Teil der Software. Wenn ich den Kommentar aus $result = mysql_queryLinie, dann geht es bis zur else - Anweisung. So ist es , dass Zeile oder der Inhalt in der if.

Ich habe im Internet nach irgendwelchen Lösungen gesucht und die meisten scheinen zu viele MySQL-Verbindungen oder dass der Benutzer verwandt zu sein ich in MySQL bin Anmeldung als keine Berechtigung. Ich habe beide geprüft. Ich kann meine andere Anfragen an andere Stelle in der Software noch durchführen, und ich habe festgestellt, dass das Konto über die richtigen Berechtigungen hat.

Veröffentlicht am 05/08/2008 um 22:45
quelle vom benutzer
In anderen Sprachen...                            


11 antworten

stimmen
10

Und wenn es überhaupt zählt, Apache @ localhost ist nicht der Name des Benutzerkontos, die ich nutzen, um in der Datenbank zu erhalten. Ich habe keine Benutzerkonten mit dem Namen in ihnen überhaupt für diese Angelegenheit Apache.

Wenn es der Benutzername ‚Apache @ localhost‘ sagt, ist nicht immer korrekt an die MySQL-Verbindung übergeben. ‚Apache‘ ist in der Regel der Benutzer, der den Prozess läuft httpd (zumindest auf Redhat-basierte Systeme), und wenn keine Benutzernamen während der Verbindung übergeben wird MySQL verwendet wer auch immer für die Verbindung anruft.

Wenn Sie die Verbindung direkt in Ihrem Skript zu tun, nicht in einer Datei mit dem Namen, erhalten Sie die gleichen Fehler?

Beantwortet am 06/08/2008 um 01:05
quelle vom benutzer

stimmen
4

Ändern Sie die include () erforderlich ist (). Wenn die „connect.php“ Datei nicht () d erforderlich werden kann, wird das Skript nicht mit einem schwerwiegenden Fehler, während include () nur eine Warnung erzeugt . Wenn der Benutzername Sie zu mysql_connect () über nicht „Apache“, ein falschen Pfad zum connect Skript ist der häufigste Weg , um diese Art von Fehlern zu bekommen.

Beantwortet am 21/10/2008 um 19:30
quelle vom benutzer

stimmen
2

Geck die Antwort ist eine große DUH! die leider dauerte es eine Weile, als auch, um herauszufinden. Sie haben wahrscheinlich eine Funktion wie DBConnect () und Sie verwenden Variablen aus einer Include-Datei, die Verbindung herzustellen. $ Conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass).

Nun, da diese in einer Funktion ist die Variablen aus der Include-Datei muss die Funktion oder auch die Funktion übergeben werden, wird nicht wissen, was $ dbhost, $ dbuser und $ dbpass ist. Ein Weg, dies zu beheben, ist diese Variablen global so Ihre Funktionen zu machen, können sie abholen. Eine andere Lösung, die nicht sehr sicher wäre Sie Host, Benutzer zu schreiben, und übergeben Sie in der mysql_connect Funktion.

Hoffe, das hilft, aber ich hatte das gleiche Problem.

Beantwortet am 02/03/2009 um 20:47
quelle vom benutzer

stimmen
2

Hat das connect.php Skript tatsächlich die Verbindung herzustellen oder hat sie definieren nur eine Funktion, die Sie aufrufen müssen, eine Verbindung zu schaffen? Der Fehler, Sie bekommen, ist symptomatisch für eine zuvor hergestellte Verbindung überhaupt hat.

ETA: Auch die gehören ändern a erfordern. Ich vermute, es ist nicht wirklich die Datei überhaupt einschließlich. Aber umfassen kann unbemerkt fehlschlagen.

Beantwortet am 21/10/2008 um 18:57
quelle vom benutzer

stimmen
2

Vergessen Sie nicht, Ihre Datenbank Fehlerprotokolle zu überprüfen. Sie sollten in der Lage sein zu sehen, ob Sie auch die DB schlagen. Wenn Sie nicht sind, sollten Sie Ihre Firewall-Regeln auf dem Feld überprüfen. Auf einer Linux-Box können Sie iptables laufen -L die Firewall-Regeln Liste zu bekommen.

Sonst wird es ein reines Zugang Problem sein. Sie ein „select * from mysql.user“ zu sehen, ob der Apache-Benutzer selbst festgelegt ist in dort. Des Weiteren würde ich empfehlen, ein Konto speziell für Ihre Anwendung mit Apache im Gegensatz zu schaffen, da jede andere Anwendung, die Sie standardmäßig als Apache laufen zu erstellen, und den unbefugten Zugriff auf Ihre db bekommen konnte.

Schauen Sie einfach auf „GRANT“ in der Dokumentation @ dev.mysql.com, um mehr Informationen zu erhalten. Wenn Sie spezifischere questiosn bezüglich db haben, ändern Sie einfach Ihre Frage, und ich werde einen Blick darauf werfen.

Beantwortet am 21/10/2008 um 18:53
quelle vom benutzer

stimmen
2

Hat der Apache-Benutzer ein Kennwort erforderlich ist, um die Datenbank zu verbinden? Wenn ja, dann die Tatsache, dass es heißt „Kennwort: NEIN“ würde mich führen zu glauben, dass der Code ohne Passwort zu verbinden versucht.

Wenn jedoch der Apache-Benutzer kein Kennwort erforderlich, eine doppelte Kontrolle der Berechtigungen kann eine gute Idee sein (was man von Ihnen erwähnt bereits überprüft). Es kann immer noch von Vorteil sein, so etwas wie dies bei einer MySQL-Eingabeaufforderung, um zu versuchen ausführen:

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

Das Syntax sollte korrekt sein.

Other than that, ich bin genauso ratlos wie Sie sind.

Beantwortet am 05/08/2008 um 22:56
quelle vom benutzer

stimmen
2

Nur um zu überprüfen, ob Sie verwenden nur diesen Teil erhalten Sie einen Fehler entdeckt ?

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

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

Wenn ja, noch eine Fehlermeldung angezeigt, wenn Sie kopieren und einfügen einen dieser Einsätze in dieser Seite, ich versuche zu sehen, ob es auf der Seite oder dass tatsächliche Linie lokal ist.

Außerdem können Sie eine Kopie der Verbindung Gespräche (minus Passwörter) veröffentlichen, es sei denn, die Einsätze genau die gleiche Syntax wie dieses Beispiel.

Beantwortet am 05/08/2008 um 22:52
quelle vom benutzer

stimmen
1

Haben Sie erinnern sich:

flush privileges;

Wenn der Benutzer nicht eingerichtet ist, dann wird es die ‚Apache‘ geben @ ‚localhost‘ Fehler.

Beantwortet am 19/09/2013 um 11:46
quelle vom benutzer

stimmen
1

Sie können eine der folgenden Aktionen ausführen:

  • Fügen Sie den Benutzer „Apache“ und Setup seiner Privilegien von phpMyAdmin oder mit MySQL auf einer Shell
  • Sagen Sie PHP laufen mysql_connectals ein anderer Benutzer, jemand, der bereits über die Privilegien benötigt (aber vielleicht nicht root), suchen Sie nach mysql.default_user in der php.ini - Datei.
Beantwortet am 21/06/2009 um 22:06
quelle vom benutzer

stimmen
1

Nur um zu überprüfen, wenn Sie sich nur Teil verwenden erhalten Sie einen Fehler entdeckt?

Wenn ja, erhalten Sie noch einen Fehler, wenn Sie kopieren und einfügen einen dieser Einsätze in diese> Seite versuche ich, zu sehen, ob es auf der Seite oder dass tatsächliche Linie lokal ist.

Außerdem können Sie eine Kopie der Verbindung Anruf Post (minus Passwörter), es sei denn, die Einsätze> verwenden, um genau die gleiche Syntax wie dieses Beispiel.

Hier ist, was in der connection.php Datei. Ich im Zusammenhang mit der Datei durch eine wie in der gleichen Art und Weise enthalten, in dem ich die INSERT IGNORE-Abfragen an anderer Stelle im Code auszuführen.

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

Ich werde versuchen, die Arbeits INSERT-Abfrage in diesem Bereich ignorieren, die zu überprüfen.

Was die anderen über das Passwort Zugriff veröffentlichen. Ich habe, wie in meinem ersten Posting erwähnt, überprüfen Sie die Berechtigungen. Früher habe ich phpMyAdmin, um zu überprüfen, dass die Berechtigungen für das Benutzerkonto Ich war mit korrekt waren. Und wenn es überhaupt zählt, Apache @ localhost ist nicht der Name des Benutzerkontos, die ich nutzen, um in der Datenbank zu erhalten. Ich habe keine Benutzerkonten mit dem Namen in ihnen überhaupt für diese Angelegenheit Apache.

Beantwortet am 05/08/2008 um 23:40
quelle vom benutzer

stimmen
1

Wenn in der Tat Sie in der Lage sind, mit den gleichen Anschluss Anrufe einzufügen, Ihr Problem am meisten liegt wahrscheinlich in den Benutzer „Apache“ nicht mit SELECT-Berechtigungen für die Datenbank. Wenn Sie phpMyAdmin installiert Sie auf die Berechtigungen für den Benutzer im Fenster Berechtigungen suchen. phpMyAdmin macht es auch sehr einfach, die Berechtigungen zu ändern.

Wenn Sie nur den Zugriff auf die Befehlszeile haben, können Sie die Berechtigungen aus der MySQL-Datenbank überprüfen.

Sie müssen wahrscheinlich etwas tun:

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

Beantwortet am 05/08/2008 um 23:02
quelle vom benutzer

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