sql >> Databáze >  >> RDS >> Mysql

Chyba získávání přístupu odepřen při provádění mysql_query v php

Konečná aktualizace:

Otevřel jsem chat s Aditii a provedli jsme tam nějaké ladění.

Jak se ukázalo, problém byl v tom, že upgradovala ze serveru, který měl povolené krátké značky, na server, který je neměl. Výsledkem bylo, že veškerý její kód, který byl uzavřen v krátkých značkách, nebyl spuštěn, a to zahrnovalo její konfigurační soubor.

Chyba v otázce byla způsobena mysql_connect() funkce není spuštěna, protože celý soubor nebyl spuštěn. A mysql_query() volání, které se spoléhalo na toto připojení, kvůli tomu selhalo.

Po opravě jejích krátkých značek tak, aby používala celý <?php tag, tento soubor byl spuštěn. Jak je uvedeno v mé původní odpovědi na tuto otázku, jednoduché uvozovky kolem proměnných jsou předávány do mysql_connect() nakonec způsobil problémy. Po upozornění, že tyto jednoduché uvozovky byly odstraněny, bylo připojení úspěšné a problém byl vyřešen.

Celou relaci ladění pro případné zainteresované strany naleznete zde .

První aktualizace:

Když jsem se na to podíval trochu blíže, existují dva kusy, které neodpovídají mé původní odpovědi (kterou jsem si nechal na konci této odpovědi, protože v ní stále jsou nějaké dobré informace).

Za prvé, chyba je spuštěna pomocí mysql_query() nikoli mysql_connect() . Je to pravděpodobně proto, že v souvislosti s připojením nedochází k žádnému zpracování chyb, takže chyba bude zaznamenána až později. Zkuste přidat nějaké zpracování chyb kolem připojení:

if (!($con = mysql_connect('$localhost','$username','$password'))) {
  echo mysql_error();
}

if (!mysql_select_db('$dbname',$con)) {
  echo mysql_error();
}

Ve výše uvedeném se chyby zobrazí, jakmile k chybě dojde.

Druhá věc, kterou vidím, je, že se připojujete k localhost pomocí ODBC uživatel. To nedává žádný smysl pokud chybu spouští kód připojení, který jste ukázali výše. Buď byste se přihlašovali pomocí uživatele s názvem $username pokud je vaším problémem problém s jedinou uvozovkou, který vysvětluji níže, nebo root pokud nejste.

Vypadá to, že se PHP pokouší připojit k výchozím přihlašovacím údajům pro vaše nastavení PHP (najdete je ve vašem php.ini soubor), spíše než pověření, která jste poskytli. To mě vede k přesvědčení, že řádky, které nám ukazujete, nejsou ve skutečnosti prováděné řádky. Jste si jisti, že se nepokoušíte připojit jinde ve svém kódu? Pokud ano, mám podezření, že vaše chyba spočívá v této části kódu.

Je také možné (musím zkontrolovat), že když se pokoušíte spustit mysql_query() proti nulovému připojení se možná PHP pokouší vytvořit připojení za vás. Na to bych ale nespoléhal.

Navrhuji, abyste zkusili spustit aktualizovaný kód, který jsem uvedl výše a který používá mysql_error() funkce, která zobrazuje chyby, jakmile k nim dojde. Můžete dokonce přidat nějaké echo vaše vlastní příkazy v těchto blocích, pro nějaké staré dobré ladění printf.

Původní odpověď:

Problém je v tom, že své proměnné uzavíráte do jednoduchých uvozovek. Pokud je zabalíte do jednoduchých uvozovek, PHP nevyhodnotí proměnnou na hodnotu. Například místo předávání root jako druhý argument předáváte $username . Nakonec se pokoušíte přihlásit na server s názvem $localhost s uživatelem $username s heslem $password .

Podívejte se na stránku s dokumentací PHP pro Strings . Vysvětluje to toto:

Pokud chcete použít proměnné uvnitř řetězce, musíte použít double uvozovky, ne jednotlivé. V tomto případě však tyto proměnné nemusíte vůbec uzavírat do uvozovek, protože jejich hodnoty jsou již struny. Proměnnou můžete předat úplně samotnou. Zkuste toto:

$con=mysql_connect($localhost, $username, $password);
mysql_select_db($dbname, $con);


  1. Jak zjistit, zda hodnota existuje v rámci VARRAY

  2. Implementace nastavení více datových center pro PostgreSQL – část první

  3. Jak zobrazit více dotazů a výsledků vedle sebe v SQL Server Management Studio (SSMS) – SQL Server / Výukový program TSQL, část 14

  4. MySQL:Proč je skóre ve fulltextu vždy 1?