sql >> Databasteknik >  >> RDS >> Mysql

Att få åtkomst nekad fel när mysql_query körs i php

Slutlig uppdatering:

Jag öppnade en chattsession med Aditii och vi gjorde en del felsökning där.

Som det visade sig var problemet att hon hade uppgraderat från en server som hade korta taggar aktiverade till en som inte gjorde det. Som ett resultat av detta kördes inte all hennes kod som var innesluten i korta taggar, och detta inkluderade hennes konfigurationsfil.

Felet i frågan berodde på mysql_connect() funktionen kördes inte eftersom hela filen inte kördes. En mysql_query() samtal som förlitade sig på den anslutningen misslyckades på grund av detta.

Efter att ha korrigerat hennes korta taggar för att använda hela <?php taggen, den filen körs. Som diskuterats i mitt ursprungliga svar på denna fråga, de enskilda citattecken runt variablerna som skickas till mysql_connect() orsakade problem till slut. Efter att ha meddelat att de enskilda citattecken skulle tas bort, lyckades anslutningen och problemet löstes.

Hela felsökningssessionen, för alla intresserade, finns här .

Första uppdateringen:

Efter att ha tittat på det här lite närmare, finns det två delar som inte stämmer överens med mitt ursprungliga svar (som jag har behållit längst ner i det här svaret, eftersom det fortfarande innehåller bra information).

Först utlöses felet av mysql_query() inte mysql_connect() . Detta beror förmodligen på att det inte finns någon felhantering kring anslutningen, så felet upptäcks inte förrän senare. Försök att lägga till lite felhantering kring anslutningen:

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

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

I ovanstående kommer fel att visas så snart felet inträffar.

Det andra jag ser är att du ansluter till localhost med ODBC användare. Detta är ingen mening om felet utlöses av anslutningskoden du har visat ovan. Antingen skulle du logga in med en användare som heter $username om ditt problem är problemet med ett citat förklarar jag nedan, eller root om du inte är det.

Det verkar som att PHP försöker ansluta med standardinloggningsuppgifterna för din PHP-inställning (finns i din php.ini fil), istället för de inloggningsuppgifter du har angett. Detta får mig att tro att raderna du visar oss inte faktiskt är raderna som körs. Är du säker på att du inte försöker ansluta någon annanstans i din kod? Om du är det, misstänker jag att ditt fel ligger i den delen av koden.

Det är också möjligt (jag måste kontrollera) att när du försöker köra mysql_query() mot en noll-anslutning, kanske PHP försöker skapa en anslutning åt dig. Jag skulle dock inte räkna med det.

Jag föreslår att du försöker köra den uppdaterade koden som jag har angett ovan, som använder mysql_error() funktion för att visa fel när de inträffar. Du kan till och med lägga till ett echo dina egna uttalanden i dessa block, för lite gammaldags utskriftsfelsökning.

Ursprungligt svar:

Problemet är att du lindar in dina variabler inom enstaka citattecken. Om du lindar in dem i enstaka citattecken, utvärderar PHP inte variabeln till värdet. Till exempel istället för att skicka root som det andra argumentet skickar du $username . I slutändan försöker du logga in på en server som heter $localhost med en användare som heter $username med lösenordet $password .

Ta en titt på PHP-dokumentationssidan för Strings . Det förklarar detta:

Om du vill använda variabler inuti en sträng måste du använda dubbel citat, inte singel. I det här fallet behöver du dock inte ens linda in dessa variabler med citattecken alls, eftersom deras värden redan är strängar. Du kan bara skicka variabeln helt själv. Prova detta:

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


  1. 5 enkla steg för att komma igång med MariaDB och Tableau

  2. Eliminera duplicering av Where-uttryck i applikationen

  3. Hur man använder SQL-markörer för speciella ändamål

  4. pip installera mysqlclient på amazon linux