MySQL / Apache Error in PHP MySQL-query

stemmen
23

Ik krijg de volgende fout:

Toegang geweigerd voor de gebruiker 'apache' @ 'localhost' (using password: NO)

Bij het gebruik van de volgende 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.;
}
?>

Het connect.phpbestand bevat mijn MySQL verbinden gesprekken die werkt prima met mijn INSERT IGNORE vragen in een ander deel van de software. Als ik commentaar uit de $result = mysql_querylijn, dan gaat het door naar de else. Dus, is het dat de lijn of de inhoud in de if.

Ik heb gezocht op het net voor alle oplossingen, en de meeste lijken te zijn in verband met teveel MySQL connecties, of dat de gebruiker ik het inloggen in MySQL zo heeft geen toestemming. Ik heb beide gecontroleerd. Ik kan nog steeds het uitvoeren van mijn andere vragen elders in de software, en ik heb vastgesteld dat de rekening heeft de juiste machtigingen.

De vraag is gesteld op 05/08/2008 om 22:45
bron van user
In andere talen...                            


11 antwoorden

stemmen
10

En als het er toe doet helemaal niet, apache @ localhost is niet de naam van de gebruikersaccount die ik gebruik om in de database. Ik heb geen gebruikersaccounts met de naam Apache tijdens ze in het geheel wat dat betreft.

Als het zegt 'apache @ localhost' de gebruikersnaam is niet juist steeds doorgegeven aan de MySQL-verbinding. 'Apache' gewoonlijk de gebruiker die het httpd proces (ten minste Redhat-systemen) loopt en als er geen gebruikersnaam tijdens de verbinding wordt gevoerd MySQL gebruikt wie eist de verbinding.

Als u de verbinding goed te doen in het script, niet in een genaamd bestand, heb je dezelfde fout te krijgen?

antwoordde op 06/08/2008 om 01:05
bron van user

stemmen
4

Verander de include () te eisen (). Als de "connect.php" bestand niet kan worden require () d, zal het script niet met een fatale fout, terwijl include () alleen genereert een waarschuwing . Als de gebruikersnaam u doorgeven aan mysql_connect () is niet "apache", een onjuist pad naar de connect script is de meest voorkomende manier om dit soort fouten te krijgen.

antwoordde op 21/10/2008 om 19:30
bron van user

stemmen
2

Dude het antwoord is een grote DUH! die helaas het kostte me een tijdje om erachter te komen ook. U hebt waarschijnlijk een functie als dbconnect () en u gebruik maakt van variabelen uit een include-bestand om de verbinding te maken. $ Conn = mysql_connect ($ dbhost, $ dbuser, $ DBPASS).

Goed ook, want dit is in een functie van de variabelen uit het include-bestand moeten worden doorgegeven aan de functie of anders de functie zullen niet weten wat $ dbhost, $ dbuser en $ DBPASS is. Een manier om dit op te lossen is om die variabelen globaal te maken, zodat uw functies kunnen ze op te halen. Een andere oplossing die niet erg veilig zou zijn om uit te schrijven je gastheer, gebruiker en pas in de mysql_connect functie.

Hoop dat dit helpt, maar ik had het zelfde probleem.

antwoordde op 02/03/2009 om 20:47
bron van user

stemmen
2

Heeft de connect.php script eigenlijk maken de verbinding of is het gewoon een functie die u nodig hebt om te bellen om een ​​verbinding te maken definiëren? De fout die je krijgt is symptomatisch voor het niet hebben van een eerder vastgestelde verbinding helemaal.

ETA: wijzigt ook de omvatten om een ​​nodig hebben. Ik vermoed dat het niet echt met inbegrip van het bestand helemaal. Maar onder andere kan stil mislukken.

antwoordde op 21/10/2008 om 18:57
bron van user

stemmen
2

Vergeet niet om uw database error logs te controleren. Je moet in staat zijn om te zien of u nog de DB raken. Als u nog niet bent, moet u uw firewall regels te controleren op de doos. Op een Linux box kunt u iptables draaien L om de firewall lijst met regels te krijgen.

Anders wordt het een pure toegang probleem. Heeft een "select * from mysql.user" om te zien of de apache gebruiker zelfs wordt opgezet daar. Verder zou ik aanraden het creëren van een account specifiek voor uw app, in tegenstelling tot het gebruik van apache, omdat een andere app die u maakt zal lopen als apache standaard, en kon onbevoegde toegang tot uw db te krijgen.

Kijk hier even omhoog "GRANT" in de documentatie @ dev.mysql.com om meer info te krijgen. Als u meer specifieke questiosn over db, slechts bewerken van uw vraag, en ik zal een kijkje nemen.

antwoordde op 21/10/2008 om 18:53
bron van user

stemmen
2

Heeft de apache gebruiker een wachtwoord nodig om verbinding met de database? Als dat zo is, dan is het feit dat het zegt "met wachtwoord: NO" zou leiden mij om te geloven dat de code probeert te verbinden zonder een wachtwoord.

Indien echter de apache gebruiker heeft geen wachtwoord nodig is, kan een dubbele controle van de machtigingen een goed idee zijn (die je je noemde al aangevinkt). Het kan nog steeds nuttig zijn om te proberen het uitvoeren van iets als dit bij een mysql prompt:

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

Dat syntaxis moet correct zijn.

Anders dan dat, ik ben net zo stumped zoals je bent.

antwoordde op 05/08/2008 om 22:56
bron van user

stemmen
2

Gewoon om te controleren, als u alleen maar dit deel u een foutmelding krijgt?

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

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

Als dat zo is, heb je nog steeds een foutmelding als je kopieert en plakt een van die Voegt in deze pagina, probeer ik om te zien of het lokaal op de pagina of dat de werkelijke lijn.

Ook kunt u een kopie van de verbinding oproepen (minus wachtwoorden) te plaatsen, tenzij de inserts gebruiken exact dezelfde syntax als dit voorbeeld.

antwoordde op 05/08/2008 om 22:52
bron van user

stemmen
1

Heb je nog te doen:

flush privileges;

Als de gebruiker niet is ingesteld dan zal het de 'apache' geven @ 'localhost' error.

antwoordde op 19/09/2013 om 11:46
bron van user

stemmen
1

U kunt een van de volgende mogelijkheden:

  • Voeg de gebruiker "apache" en setup zijn privileges van phpMyAdmin of MySQL op een schelp
  • Vertel php uit te voeren mysql_connectals een andere gebruiker, iemand die al de privileges die nodig is (maar misschien niet root), op zoek naar mysql.default_user in uw php.ini bestand.
antwoordde op 21/06/2009 om 22:06
bron van user

stemmen
1

Gewoon om te controleren, als je gewoon dit deel gebruikt u een foutmelding krijgt?

Als dat zo is, heb je nog steeds een foutmelding als je kopieert en plakt een van die Voegt in deze> pagina, ik probeer om te zien of het lokaal op de pagina of dat de werkelijke lijn.

Ook kunt u een kopie van de verbinding oproepen (minus wachtwoorden) te plaatsen, tenzij de inserts> gebruiken exact dezelfde syntax als dit voorbeeld.

Hier is wat er in de connection.php bestand. Ik gekoppeld aan het bestand via een op te nemen in dezelfde manier als waar ik voer de INSERT IGNORE queries elders in de code.

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

Ik zal proberen de werkende INSERT negeren query in dit gebied om te controleren dat.

Met betrekking tot de andere posten over het wachtwoord toegang. Ik deed, zoals in mijn eerste post, Controleer de toegangsrechten. Ik gebruikte phpMyAdmin om te controleren of de machtigingen voor de gebruikersaccount heb ik gebruik gemaakt juist waren. En als het er toe doet helemaal niet, apache @ localhost is niet de naam van de gebruikersaccount die ik gebruik om in de database. Ik heb geen gebruikersaccounts met de naam Apache tijdens ze in het geheel wat dat betreft.

antwoordde op 05/08/2008 om 23:40
bron van user

stemmen
1

Als het inderdaad je in staat om in te voegen met behulp van dezelfde verbinding oproepen, uw probleem hoogstwaarschijnlijk ligt in de gebruiker "apache" niet met SELECT machtigingen voor de database. Als je phpMyAdmin geïnstalleerd, kunt u kijken naar de machtigingen voor de gebruiker in het deelvenster voorrechten. phpMyAdmin maakt het ook heel gemakkelijk om de machtigingen te wijzigen.

Als je alleen toegang tot de command line, kunt u de machtigingen van de MySQL database te controleren.

U zult waarschijnlijk nodig hebt om iets te doen, zoals:

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

antwoordde op 05/08/2008 om 23:02
bron van user

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