Eroare MySQL / Apache în interogare PHP MySQL

voturi
23

Sunt obtinerea următoarea eroare:

Acces interzis pentru 'apache' @ 'localhost' utilizator (folosind parola: NO)

Când se utilizează următorul cod:

<?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.phpFișierul conține MySQL meu conecta apelurile care sunt bine lucrează cu meu INSERT IGNORE interogări într -o altă parte a software - ului. Dacă am comentați $result = mysql_querylinia, apoi se trece prin declarația altceva. Deci, este acea linie sau conținutul în If.

Am fost căutarea pe net pentru orice soluții, iar cele mai multe par a fi legate de prea multe conexiuni MySQL sau ca utilizatorul am logare în MySQL ca nu are permisiunea. Am verificat ambele. Pot efectua încă alte interogările în altă parte în software-ul, și am verificat că contul are permisiunile corecte.

Întrebat 05/08/2008 la 22:45
sursa de către utilizator
În alte limbi...                            


11 răspunsuri

voturi
10

Și dacă contează deloc, apache @ localhost nu este numele contului de utilizator pe care am folosi pentru a intra în baza de date. Nu am nici conturi de utilizator cu numele apache în ele, la toate pentru care contează.

În cazul în care se spune „apache @ localhost“ numele de utilizator nu este obtinerea trecut corect la conexiunea MySQL. „Apache“ este în mod normal, utilizatorul care ruleaza procesul httpd (cel puțin pe sistemele bazate pe Redhat) și în cazul în care nu numele de utilizator este trecut în timpul conexiunii MySQL foloseste oricine cere conexiunea.

Dacă faci dreptul de conexiune în script-ul dvs., nu într-un fișier numit, puteți obține aceeași eroare?

Publicat 06/08/2008 la 01:05
sursa de către utilizator

voturi
4

Schimbarea includ () pentru a solicita (). Dacă fișierul „connect.php“ nu poate fi nevoie () d, script - ul va eșua cu o eroare fatală, în timp ce includ () generează doar un avertisment . Dacă numele de utilizator pe care îl trece la mysql_connect () nu este „apache“, o cale greșită de a script - ul de conectare este cel mai comun mod de a obține acest tip de eroare.

Publicat 21/10/2008 la 19:30
sursa de către utilizator

voturi
2

Dude răspunsul este un DUH mare! care, din păcate, mi-a luat un timp să ne dăm seama, de asemenea. Probabil că aveți o funcție ca dbconnect () și utilizați variabile dintr-un fișier includ pentru a face conexiunea. $ Conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass).

Ei bine, din moment ce acest lucru este în interiorul unei funcții variabilele din fișierul includ trebuie să fie trecut la funcția sau altfel funcția nu va ști ce $ dbhost, $ dbuser și $ dbpass este. O modalitate de a rezolva această problemă este de a face aceste variabile globale astfel încât funcțiile le pot ridica. O altă soluție care nu este foarte sigur ar fi să scrie tu gazdă, de utilizator și treci în funcția mysql_connect.

Sper că acest lucru ajută, dar am avut aceeași problemă.

Publicat 02/03/2009 la 20:47
sursa de către utilizator

voturi
2

Are script-ul connect.php face de fapt conexiunea sau nu definește doar o funcție de care aveți nevoie pentru a apela pentru a crea o conexiune? Eroarea pe care obțineți este simptomatic de a nu avea o conexiune stabilită anterior, la toate.

ETA: De asemenea, schimbați includ într-o nevoie. Bănuiesc că nu include de fapt fișierul la toate. Dar includ poate eșua în tăcere.

Publicat 21/10/2008 la 18:57
sursa de către utilizator

voturi
2

Nu uitați să verificați jurnalele de eroare de baze de date. Tu ar trebui să poată vedea dacă sunt chiar lovind PB. Daca nu sunteti, ar trebui să verificați regulile de firewall de pe cutie. Pe o cutie linux puteți rula iptables -L pentru a obține regulile lista de firewall.

În caz contrar, va fi o problemă de acces pur. Nu o „selectați * de la mysql.user“ pentru a vedea dacă utilizatorul este chiar apache configurat acolo. Mai mult, aș recomanda crearea unui cont special pentru aplicația dvs., spre deosebire de utilizarea apache, deoarece orice altă aplicație vă creați va rula ca apache în mod implicit, și ar putea obține acces neautorizat la db dumneavoastră.

Doar privi în sus „GRANT“ în documentația @ dev.mysql.com pentru a obține mai multe informații. Dacă aveți questiosn mai specifice în ceea ce privește dB, modificați doar întrebarea dvs., și i se va lua o privire.

Publicat 21/10/2008 la 18:53
sursa de către utilizator

voturi
2

Are utilizatorul apache necesită o parolă pentru a se conecta la baza de date? Dacă este așa, atunci faptul că se spune „folosind parola: NO“ m-ar duce să cred că codul încearcă să se conecteze fără parolă.

În cazul în care, cu toate acestea, utilizatorul apache nu necesită o parolă, un dublu-verificare a permisiunilor poate fi o idee bună (pe care le-ați menționat deja verificat). Acesta poate fi în continuare benefică pentru a încerca executa ceva de genul asta la un prompt mysql:

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

Această sintaxă ar trebui să fie corectă.

În afară de asta, eu sunt la fel ca tine sunt lovit.

Publicat 05/08/2008 la 22:56
sursa de către utilizator

voturi
2

Doar pentru a verifica, dacă utilizați doar această parte veți obține o eroare?

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

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

Dacă da, nu încă obține o eroare dacă copiați și inserați una dintre aceste inserturi în această pagină, am încercat să văd dacă este local la pagina sau acea linie actuale.

De asemenea, puteți posta o copie a apelurilor de conectare (minus parolele), cu excepția cazului în inserțiile folosesc exact aceeași sintaxă ca acest exemplu.

Publicat 05/08/2008 la 22:52
sursa de către utilizator

voturi
1

Ți-ai amintit să faci:

flush privileges;

În cazul în care utilizatorul nu este configurat, atunci acesta va da „apache“ @ „localhost“ eroare.

Publicat 19/09/2013 la 11:46
sursa de către utilizator

voturi
1

Puteți face una dintre următoarele:

  • Adăugați utilizator „Apache“ și configurarea privilegiile sale din phpMyAdmin sau folosind MySQL pe un shell
  • Spune - i php pentru a rula mysql_connectca un alt utilizator, cineva care are deja privilegiile necesare (dar poate nu rădăcină), uita - te pentru mysql.default_user în fișierul php.ini.
Publicat 21/06/2009 la 22:06
sursa de către utilizator

voturi
1

Doar pentru a verifica, dacă utilizați doar această parte veți obține o eroare?

Dacă da, nu încă obține o eroare dacă copiați și inserați una dintre aceste inserturi in aceasta> pagina, am încercat să văd dacă este local la pagina sau acea linie actuale.

De asemenea, puteți posta o copie a apelurilor de conectare (minus parolele), cu excepția cazului în inserțiile> Se utilizează exact aceeași sintaxă ca acest exemplu.

Iată ceea ce este în fișierul connection.php. Am legat la dosar printr-o includ în același mod ca și în cazul în care am executa INSERT IGNORE interogări în altă parte în codul.

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

Voi încerca INSERT de lucru IGNORE interogare în acest domeniu, pentru a verifica afară.

În ceea ce privește celelalte postarea despre accesul parolei. Am făcut-o, așa cum se menționează în prima mea postare, verificați permisiunile. Am folosit phpMyAdmin pentru a verifica dacă permisiunile pentru contul de utilizator am folosit au fost corecte. Și dacă contează deloc, apache @ localhost nu este numele contului de utilizator pe care am folosi pentru a intra în baza de date. Nu am nici conturi de utilizator cu numele apache în ele, la toate pentru care contează.

Publicat 05/08/2008 la 23:40
sursa de către utilizator

voturi
1

Dacă într-adevăr, sunteți în măsură să inserați folosind aceleași apeluri de conectare, problema cel mai probabil se află în utilizator „apache“ nu are permisiuni SELECT pe baza de date. Dacă aveți instalat phpMyAdmin vă puteți uita la permisiunile pentru utilizator în panoul Privilegii. phpMyAdmin, de asemenea, face foarte ușor de a modifica permisiunile.

Dacă aveți acces la linia de comandă numai, puteți verifica permisiunile din baza de date MySQL.

Probabil că va trebui să faci ceva de genul:

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

Publicat 05/08/2008 la 23:02
sursa de către utilizator

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