MySQL / Apache Chyba v PHP MySQL dotazu

hlasů
23

Dostávám následující chybu:

Přístup byl odepřen pro uživatele ‚apache‘ @ ‚localhost‘ (pomocí hesla: NE)

Při použití následující kód:

<?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.phpSoubor obsahuje můj MySQL spojování hovorů, které jsou v pořádku se svými INSERT IGNORE dotazy v jiné části softwaru. Kdybych komentář mimo $result = mysql_queryřádek, pak to jde až do výpisu jiného. Tak, to je, že linka nebo obsah v IF.

Jsem hledal na netu za jakékoli řešení, a nejvíce se zdají být spojeny s příliš mnoha připojení MySQL, nebo že uživatel jsem přihlásil do MySQL jako nemá oprávnění. Ověřil jsem obojí. Mohu nadále provádět mé další dotazy jinde v programu, a jsem si ověřil, že účet má správná oprávnění.

Položena 05/08/2008 v 22:45
zdroj uživatelem
V jiných jazycích...                            


11 odpovědí

hlasů
10

A pokud je to důležité vůbec, apache @ localhost není název uživatelského účtu, který mohu použít, aby se dostat do databáze. Nemám žádné uživatelské účty s názvem Apache v nich vůbec na to přijde.

Je-li říci ‚apache @ localhost‘ uživatelské jméno není stále předán správně připojení MySQL. ‚Apache‘ je normálně uživatel, který spustí proces httpd (alespoň v systémech Redhat bázi), a není-li uživatelské jméno je předán během připojení MySQL používá koho volá pro připojení.

Pokud tak učiníte právo připojení ve skriptu, nikoliv ve volaném souboru se dostanete stejnou chybu?

Odpovězeno 06/08/2008 v 01:05
zdroj uživatelem

hlasů
4

Změnit include () a require (). Je-li soubor „connect.php“ nelze požadovat () d, bude skript nezdaří s fatálním omylem, zatímco include () generuje pouze varování . Je-li uživatelské jméno jste přechodem na mysql_connect () není „apache“, nesprávná cesta k connect scénář je nejčastější způsob, jak dostat tento typ chyby.

Odpovězeno 21/10/2008 v 19:30
zdroj uživatelem

hlasů
2

Vole, odpověď je velký DUH! což bohužel mi to chvíli trvalo, než se přijít na to, jak dobře. Pravděpodobně máte funkci jako DbConnect () a pomocí proměnných ze souboru patří k připojení. $ Conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass).

Dobře, protože to je uvnitř funkce proměnné ze souboru patří třeba předán do funkce či jiný funkci nebude vědět, co $ dbhost, $ dbuser a $ dbpass je. Způsob, jak napravit to, aby se tyto proměnné globální, takže vaše funkce lze vyzvednout. Dalším řešením, které není příliš bezpečné, by bylo napsat, že jste hostitele uživatele a předat funkci mysql_connect.

Doufám, že to pomůže, ale měl jsem stejný problém.

Odpovězeno 02/03/2009 v 20:47
zdroj uživatelem

hlasů
2

Má connect.php skript vlastně dělat spojení nebo to jen definovat funkci, je třeba volat k vytvoření připojení? Chyba, že jste stále je příznačné, že nemá již zavedenou spojení vůbec.

ETA: změnit také patří do A vyžadovat. Mám podezření, že to není ve skutečnosti bez soubor vůbec. Ale zahrnují může selhat bez zásahu uživatele.

Odpovězeno 21/10/2008 v 18:57
zdroj uživatelem

hlasů
2

Nezapomeňte zkontrolovat chybové protokoly databáze. Byste měli být schopni zjistit, jestli jste ještě bít DB. Pokud nejste, měli byste zkontrolovat pravidla brány firewall na krabici. Na linux box můžete spustit iptables -L dostat seznamu pravidel firewallu.

V opačném případě to bude čistě otázka přístupu. Ještě za „select * from mysql.user“ aby zjistil, zda je uživatel apache je dokonce nastavit tam. Dále bych doporučil vytvoření účtu speciálně pro aplikace ve srovnání s použitím apache, protože jakékoliv jiné aplikace, které vytvoříte bude probíhat jako apache ve výchozím nastavení, a mohl získat neoprávněný přístup k db.

Stačí se podívat do „Grant“ v dokumentaci @ dev.mysql.com získat více informací. Máte-li konkrétnější questiosn o db, stačí upravit vaši otázku, a já se podíváme.

Odpovězeno 21/10/2008 v 18:53
zdroj uživatelem

hlasů
2

Má uživatel apache vyžadují heslo pro připojení k databázi? Pokud ano, pak skutečnost, že se říká, že „pomocí hesla: NE“ by mě vedou k domněnce, že kód se pokouší připojit bez hesla.

Pokud však uživatel apache nevyžaduje heslo, double-kontrola oprávnění může být dobrý nápad (který vám již bylo zmíněno zaškrtnuto). Stále může být prospěšné, aby se pokusili vykonání něco takového v mysql příkazového řádku:

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

Že syntaxe by měla být správná.

Jiné, než to, že jsem stejně jako pařezy jako vy.

Odpovězeno 05/08/2008 v 22:56
zdroj uživatelem

hlasů
2

Jen pro kontrolu, pokud budete používat pouze tuto část dostanete chybu?

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

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

Pokud ano, můžete ještě dostat chybu, pokud se zkopírovat a vložit jeden z těch příloh na této stránce, snažím se zjistit, jestli je to lokální stránky nebo že skutečné vedení.

Také si můžete přidat kopii připojení volání (bez hesla), pokud se používají vložky přesně stejnou syntaxi jako tento příklad.

Odpovězeno 05/08/2008 v 22:52
zdroj uživatelem

hlasů
1

Nezapomněl jsi dělat:

flush privileges;

Není-li uživatel není nastaven, pak bude dávat ‚apache‘ @ ‚localhost‘ chyba.

Odpovězeno 19/09/2013 v 11:46
zdroj uživatelem

hlasů
1

Můžete si vybrat jednu z následujících možností:

  • Přidejte uživatelský „apache“ a nastavení jeho oprávnění pro phpMyAdmin nebo MySQL na skořápce
  • Řekněte php spustit mysql_connectjako jiný uživatel, někoho, kdo má již zapotřebí oprávnění (ale možná ne root), podívejte se na mysql.default_user v souboru php.ini.
Odpovězeno 21/06/2009 v 22:06
zdroj uživatelem

hlasů
1

Jen pro kontrolu, pokud budete používat pouze tuto část dostanete chybu?

Pokud ano, můžete ještě dostat chybu, pokud se zkopírovat a vložit jeden z těchto příloh do této> stránka, snažím se zjistit, jestli je to lokální stránky nebo že skutečné vedení.

Také si můžete přidat kopii připojení volání (bez hesla), pokud vložek> použít přesně stejný příkaz jako tento příklad.

Zde je to, co je v souboru connection.php. spojený I do souboru pomocí include stejným způsobem, jako kde jsem spustit INSERT IGNORE dotazy jinde v kódu.

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

Pokusím pracovní INSERT IGNORE dotaz v této oblasti, aby zkontrolovat, že ven.

Co se týče ostatních vysílajícím o přístupu pomocí hesla. Udělal jsem, jak je uvedeno v mém prvním vysílání, zkontrolujte oprávnění. Použil jsem phpMyAdmin ověřit, že oprávnění pro uživatelský účet byl jsem s použitím byly správné. A pokud je to důležité vůbec, apache @ localhost není název uživatelského účtu, který mohu použít, aby se dostat do databáze. Nemám žádné uživatelské účty s názvem Apache v nich vůbec na to přijde.

Odpovězeno 05/08/2008 v 23:40
zdroj uživatelem

hlasů
1

Pokud vůbec jste schopni vložit s použitím stejných volání připojení, váš problém s největší pravděpodobností spočívá v uživatelské „apache“ nemají SELECT oprávnění na databázi. Máte-li nainstalován phpMyAdmin můžete prohlédnout oprávnění pro uživatele v podokně oprávnění. phpMyAdmin také dělá to velmi snadno upravit oprávnění.

Pokud máte pouze přístup k příkazové řádce, můžete zkontrolovat oprávnění z databáze MySQL.

Pravděpodobně budete muset udělat něco jako:

GRANT vyberte na myDatabase.myTable TO 'apache' @ 'localhost';

Odpovězeno 05/08/2008 v 23:02
zdroj uživatelem

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