Vra

Ek kry die volgende fout:

  

Toegang geweier vir gebruiker 'apache' @ 'local host' (met behulp van wagwoord: GEEN)

By die gebruik van die volgende 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.";
}
?>

Die connect.php lêer bevat my MySQL konnekteer oproepe wat fyn werk met my INSERT navrae in 'n ander gedeelte van die sagteware. As ek 'n opmerking uit die $result = mysql_query lyn, dan gaan dit deur na die ander verklaring. So, dit is wat lyn of die inhoud in die as.

Ek is op soek die netto vir enige oplossings, en die meeste blyk te wees wat verband hou met te veel MySQL verbindings of dat die gebruiker ek meld by MySQL as nie toestemming het. Ek het beide nagegaan. Ek kan nog uit te voer my ander navrae elders in die sagteware, en ek het bewys dat die rekening het die korrekte toestemming.

Was dit nuttig?

Oplossing

  

En as dit saak maak nie, apache @ localhost is nie die naam van die rekening wat ek gebruik om te kry in die databasis. Ek het geen gebruiker rekeninge met die naam apache in hulle glad nie vir die saak.

As dit sê "apache @ local host 'die gebruikersnaam is nie om korrek geslaag om die MySQL-verbinding. 'Apache' is gewoonlik die gebruiker wat die httpd proses (ten minste op Redhat-gebaseerde stelsels) loop en indien geen gebruikersnaam tydens die verbinding is verby MySQL gebruik wie 'n beroep vir die verband.

As jy die verband reg in jou script te doen, nie in 'n beroep lêer, kan jy dieselfde fout te kry?

Ander wenke

Verander die sluit () te vereis (). As die "connect.php" lêer nie kan vereis () d, die script sal misluk met 'n fatale fout, terwyl insluit () net genereer 'n waarskuwing . As die gebruikersnaam wat jy verbygaan om mysql_connect () is nie "apache", 'n verkeerde pad na die Connect script is die mees algemene manier om hierdie tipe fout kry.

Moenie vergeet om jou databasis fout logs kyk. Jy moet in staat wees om te sien of jy selfs die DB tref. As jy nie is, moet jy jou firewall reëls te gaan op die boks. Op 'n linux boks jy kan iptables hardloop -L om die firewall lys reëls kry.

Andersins sal dit 'n suiwer toegang kwessie wees. Moenie 'n "kies * van mysql.user" om te sien of die apache gebruiker selfs opgestel in daar. Verder sou ek raai die skep van 'n rekening spesifiek vir jou program is in teenstelling met die gebruik van Apache, aangesien enige ander inligting wat jy skep sal loop as apache by verstek, en kan ongemagtigde toegang tot jou db kry.

Kyk net op "GRANT" in die dokumentasie @ dev.mysql.com vir meer besonderhede. As jy meer spesifieke questiosn met betrekking tot db, net jou vraag wysig, en ek sal 'n blik te neem.

Maak die connect.php script eintlik maak die verband of is dit net 'n funksie wat jy nodig het om te bel om 'n verband te skep definieer? Die fout wat jy kry is simptomaties van nie met 'n voorheen gevestigde verbinding glad nie.

ETA: verander ook die sluit van 'n eis. Ek vermoed dit is nie eintlik insluitend die lêer at all. Maar sluit kan stil misluk.

Dude die antwoord is 'n groot duh! wat ongelukkig dit het my 'n rukkie om uit te vind as well. Jy het waarskynlik 'n funksie soos dbconnect () en jy is met behulp van veranderlikes van 'n sluit-lêer na die verband te maak. $ Conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass).

Wel aangesien dit binne 'n funksie van die veranderlikes van die sluit-lêer moet die funksie word geslaag of anders die funksie sal nie weet wat $ dbhost, $ dbuser en $ dbpass is. Een manier om dit op te los, is om daardie veranderlikes globale maak sodat jou funksies kan hulle optel. Nog 'n oplossing wat nie baie veilig sou wees om uit te skryf wat jy gasheer, gebruiker en slaag in die mysql_connect funksie.

Hoop dit help, maar ek het dieselfde probleem.

As julle ten staat om in te voeg met behulp van dieselfde verband oproepe is, jou probleem waarskynlik lê in die gebruiker "apache" sonder vergunningsvlakke op die databasis. As jy 'phpMyAdmin geïnstalleer kan jy kyk na die regte vir die gebruiker in die paneel Voorregte. phpMyAdmin maak dit ook baie maklik om die regte te verander.

As jy net toegang tot die command line het, kan jy die regte van die MySQL databasis te gaan.

Jy sal waarskynlik nodig het om iets te doen soos:

GRANT SELECT OP myDatabase.myTable OM 'apache' @ 'localhost';

Het jy onthou om te doen:

flush privileges;

As die gebruiker nie opgestel dan sal dit die "apache 'n fout gee @ 'local host.

Net om seker te maak, as jy gebruik net hierdie deel jy 'n fout kry?

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

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

As dit so is, het jy nog steeds 'n fout as jy kopieer en plak een van daardie Inserts in hierdie bladsy, ek probeer om te sien of dit is plaaslike na die bladsy of dat werklike lyn.

Jy kan ook 'n afskrif van die verband oproepe (minus wagwoorde) plaas, tensy die insetsels gebruik presies dieselfde sintaksis as hierdie voorbeeld.

  

Net om seker te maak, as jy net hierdie deel gebruik jy 'n fout kry?

     

As dit so is, het jy nog steeds 'n fout as jy kopieer en plak een van daardie Inserts in hierdie> bladsy, ek probeer om te sien of dit is plaaslike na die bladsy of dat werklike lyn.

     

Jy kan ook 'n afskrif van die verband oproepe (minus wagwoorde) plaas, tensy die insetsels> gebruik presies dieselfde sintaksis as hierdie voorbeeld.

Hier is wat in die connection.php lêer. Ek gekoppel aan die lêer deur 'n sluit in die dieselfde manier as waar ek elders uit te voer die insetsel navrae in die kode.

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

Ek sal die werk INSERT navraag probeer in hierdie gebied uit te kyk nie.

As die ander plaas oor die wagwoord toegang. Ek het, soos uiteengesit in my eerste plasing, gaan permissies. Ek gebruik phpMyAdmin om te bevestig dat die regte vir die rekening Ek is met behulp van korrekte was. En as dit saak maak nie, apache @ localhost is nie die naam van die rekening wat ek gebruik om te kry in die databasis. Ek het geen gebruiker rekeninge met die naam apache in hulle glad nie vir die saak.

Jy kan een van die volgende te doen:

  • Voeg die gebruiker "apache" en sy voorregte van phpMyAdmin of die gebruik van mysql ingestel is op 'n dop
  • Vertel php om mysql_connect hardloop as 'n ander gebruiker, iemand wat reeds die voorregte nodig (maar miskien nie wortel), kyk vir mysql.default_user in jou php.ini lêer.

Maak die apache gebruiker 'n wagwoord vereis om toegang tot die databasis? As dit so is, dan is die feit dat dit sê "die gebruik van wagwoord: GEEN". My sal lei om te glo dat die kode is besig om aan te sluit sonder 'n wagwoord

As jy egter die apache gebruiker nie 'n wagwoord vereis, 'n dubbel-check van die regte kan 'n goeie idee wees (wat jy jou genoem reeds nagegaan). Dit kan nog voordelig wees om te probeer uitvoer so iets op 'n mysql vinnige:

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

Dit sintaksis moet korrek wees.

Anders as dit, ek is net so gestonk as jy is.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top