MySQL / Apache Feil på PHP MySQL spørring

stemmer
23

Jeg får følgende feilmelding:

Access denied for user 'apache' @ 'localhost' (med passord: NO)

Når du bruker følgende kode:

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

Den connect.phpfilen inneholder min MySQL koble opp samtaler som jobber bra med mine INSERTspørsmål i en annen del av programvaren. Hvis jeg kommentere ut $result = mysql_querylinjen, så det går gjennom til annet uttalelse. Så det er den linjen eller innholdet i If.

Jeg har søkt på nettet for noen løsninger, og de fleste synes å være relatert til for mange MySQL tilkoblinger eller at brukeren jeg logger inn MySQL som ikke har tillatelse. Jeg har sjekket begge. Jeg kan fortsatt utføre mine andre spørsmål andre steder i programvaren, og jeg har bekreftet at kontoen har de riktige tillatelsene.

Publisert på 05/08/2008 klokken 21:45
kilden bruker
På andre språk...                            


11 svar

stemmer
10

Og hvis det betyr noe i det hele tatt, er apache @ localhost ikke navnet på brukerkontoen som jeg bruker for å komme inn i databasen. Jeg har ikke noen brukerkontoer med navnet apache i dem i det hele tatt for den saks skyld.

Hvis det er å si 'apache @ localhost' brukernavnet ikke er å få sendt riktig til MySQL-tilkoblingen. 'Apache' er normalt brukeren som kjører httpd prosess (i det minste på Redhat-baserte systemer) og hvis ingen brukernavn er passert i løpet av forbindelsen MySQL bruker hvem som ringer for tilkoblingen.

Hvis du gjør tilkoblingen rett i skriptet, ikke i en som heter fil, får du den samme feilen?

Svarte 06/08/2008 kl. 00:05
kilden bruker

stemmer
4

Endre include () til å kreve (). Hvis "connect.php" filen ikke kan kreve () d, vil skriptet mislykkes med en fatal feil, mens include () bare genererer en advarsel . Hvis brukernavnet du sender til mysql_connect () er ikke "Apache", feil bane til connect skriptet er den vanligste måten å få denne type feil.

Svarte 21/10/2008 kl. 18:30
kilden bruker

stemmer
2

Dude svaret er en stor DUH! som dessverre det tok meg en stund å finne ut også. Du har sannsynligvis en funksjon som dbconnect () og du bruker variabler fra en include-fil for å gjøre tilkoblingen. $ Conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass).

Vel siden dette er inne i en funksjon variablene fra inkludere filen må sendes til funksjonen ellers funksjonen vil ikke vite hva $ dbhost, $ dbuser og $ dbpass er. En måte å løse dette på er å gjøre disse variablene global slik at funksjoner kan plukke dem opp. En annen løsning som ikke er veldig sikker ville være å skrive ut du vert, bruker og passerer i mysql_connect funksjon.

Håper dette hjelper, men jeg hadde det samme problemet.

Svarte 02/03/2009 kl. 19:47
kilden bruker

stemmer
2

Har connect.php manuset faktisk gjøre tilkoblingen eller er den bare definere en funksjon du må ringe for å opprette en tilkobling? Feilen du får er symptomatisk for ikke å ha en tidligere etablert tilkobling i det hele tatt.

ETA: Også endre inkluderer en trenger. Jeg mistenker at det er faktisk ikke inkludert filen i det hele tatt. Men inkluderer kan mislykkes stille.

Svarte 21/10/2008 kl. 17:57
kilden bruker

stemmer
2

Ikke glem å sjekke databasefeillogger. Du bør være i stand til å se om du er selv treffer DB. Hvis du ikke er det, bør du sjekke dine brannmurregler på boksen. På en linux boks kan du kjøre iptables -L å få brannmur listen regler.

Ellers vil det være en ren tilgang problem. Har en "select * from mysql.user" for å se om apache brukeren selv sette opp der. Videre vil jeg anbefale å opprette en konto spesielt for din app motsetning til å bruke apache, siden noen annen app du oppretter vil kjøre som apache som standard, og kunne få uautorisert tilgang til db.

Bare se opp "GRANT" i dokumentasjonen @ dev.mysql.com å få mer info. Hvis du har mer spesifikk questiosn om db, bare redigere ditt spørsmål, og jeg vil ta en titt.

Svarte 21/10/2008 kl. 17:53
kilden bruker

stemmer
2

Har apache brukeren krever et passord for å koble til databasen? Hvis ja, så det faktum at det står "ved hjelp av passord: NEI" ville føre meg til å tro at koden prøver å koble til uten et passord.

Hvis imidlertid den apache brukeren ikke krever et passord, kan en dobbel-sjekk av tillatelser være en god idé (som du nevnte du allerede sjekket). Det kan likevel være nyttig å prøve å gjennomføre noe som dette på en mysql teksten:

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

Det syntaks bør være korrekt.

Annet enn det, jeg er bare så stabbet som du er.

Svarte 05/08/2008 kl. 21:56
kilden bruker

stemmer
2

Bare for å sjekke, hvis du bruker bare denne delen får du en feil?

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

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

I så fall trenger du fortsatt får en feilmelding hvis du kopierer og limer en av disse Setter inn denne siden, jeg prøver å se om det er lokale til siden eller at selve linjen.

Du kan også legge inn en kopi av tilkoblings samtaler (minus passord), med mindre innleggene bruke nøyaktig samme syntaks som dette eksempelet.

Svarte 05/08/2008 kl. 21:52
kilden bruker

stemmer
1

Har du husket å gjøre:

flush privileges;

Hvis brukeren ikke er satt opp så vil det gi 'apache' @ 'localhost' feil.

Svarte 19/09/2013 kl. 10:46
kilden bruker

stemmer
1

Du kan gjøre ett av følgende:

  • Legg til brukeren "Apache" og setup sine privilegier fra phpmyadmin eller bruke mysql på et skall
  • Fortell php til å kjøre mysql_connectsom en annen bruker, noen som allerede har rettighetene nødvendig (men kanskje ikke root), se etter mysql.default_user i php.ini filen.
Svarte 21/06/2009 kl. 21:06
kilden bruker

stemmer
1

Bare for å sjekke, hvis du bruker bare denne delen får du en feil?

I så fall trenger du fortsatt får en feilmelding hvis du kopierer og limer en av disse Setter inn i denne> siden, jeg prøver å se om det er lokale til siden eller at selve linjen.

Du kan også legge inn en kopi av tilkoblings samtaler (minus passord), med mindre innleggene> bruke nøyaktig samme syntaks som dette eksempelet.

Her er hva som er i connection.php filen. Jeg knyttet til mappen gjennom en inkludere på samme måte som der jeg utføre spørringer INSERT andre steder i koden.

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

Jeg vil prøve å jobbe INSERT spørring i dette området for å sjekke det ut.

Som for de andre legger ut om passordtilgang. Jeg gjorde det, som nevnt i mitt første innlegg, sjekk tillatelser. I brukte phpMyAdmin for å verifisere at tilgangen til brukerkontoen jeg brukte var riktige. Og hvis det betyr noe i det hele tatt, er apache @ localhost ikke navnet på brukerkontoen som jeg bruker for å komme inn i databasen. Jeg har ikke noen brukerkontoer med navnet apache i dem i det hele tatt for den saks skyld.

Svarte 05/08/2008 kl. 22:40
kilden bruker

stemmer
1

Hvis du virkelig er i stand til å sette inn ved hjelp av de samme tilkoblings samtaler, problemet ligger mest sannsynlig i bruker "Apache" ikke å ha SELECT tillatelser for databasen. Hvis du har phpMyAdmin installert, kan du se på tillatelsene for brukeren i Privilegier ruten. phpMyAdmin gjør det også svært enkelt å endre tillatelsene.

Hvis du bare har tilgang til kommandolinjen, kan du sjekke tillatelsene fra mysql database.

Du vil sannsynligvis trenger å gjøre noe sånt som:

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

Svarte 05/08/2008 kl. 22:02
kilden bruker

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