Mysql
 sql >> база данни >  >> RDS >> Mysql

Получаване на грешка за отказан достъп при изпълнение на mysql_query в php

Окончателна актуализация:

Отворих сесия за чат с Aditii и там направихме отстраняване на грешки.

Както се оказва, проблемът е, че тя е надградила от сървър, който има разрешени кратки тагове, до такъв, който не е. В резултат на това целият й код, който беше затворен в кратки тагове, не се изпълняваше и това включваше конфигурационния й файл.

Грешката във въпроса се дължи на mysql_connect() функцията не се изпълнява, защото целият файл не се изпълняваше. A mysql_query() обаждането, което разчита на тази връзка, не успя поради това.

След коригиране на нейните кратки тагове да използва пълния <?php маркер, този файл се изпълнява. Както беше обсъдено в първоначалния ми отговор на този въпрос, единичните кавички около променливите се предават на mysql_connect() в крайна сметка създава проблеми. След уведомяване, че тези единични кавички бъдат премахнати, връзката беше успешна и проблемът беше разрешен.

Цялата сесия за отстраняване на грешки за всички заинтересовани страни може да бъде намерена тук .

Първа актуализация:

След като разгледах това малко по-отблизо, има две части, които не отговарят на първоначалния ми отговор (който запазих в долната част на този отговор, тъй като все още има добра информация).

Първо, грешката се задейства от mysql_query() не mysql_connect() . Това вероятно е защото няма обработка на грешки около връзката, така че грешката не се забелязва чак по-късно. Опитайте да добавите обработка на грешки около връзката:

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

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

В горните грешки ще се покажат веднага щом възникне грешката.

Второто нещо, което виждам, е, че се свързвате с localhost с ODBC потребител. Това няма смисъл ако грешката се задейства от кода за връзка, който сте показали по-горе. Или ще влезете с потребител, наречен $username ако проблемът ви е проблемът с единични кавички, който обяснявам по-долу, или root ако не си.

Изглежда, че PHP се опитва да се свърже с идентификационните данни по подразбиране за вашата PHP настройка (намерена във вашия php.ini файл), а не идентификационните данни, които сте предоставили. Това ме кара да вярвам, че редовете, които ни показвате, всъщност не са редовете, които се изпълняват. Сигурни ли сте, че не се опитвате да се свържете другаде във вашия код? Ако сте, подозирам, че грешката ви се крие в тази част от кода.

Възможно е също (трябва да проверя), когато се опитвате да изпълните mysql_query() срещу нулева връзка, може би PHP се опитва да създаде връзка за вас. Не бих разчитал на това обаче.

Предлагам ви да опитате да стартирате актуализирания код, който предоставих по-горе, който използва mysql_error() функция за показване на грешките, когато се случват. Можете дори да добавите малко echo собствени изявления в тези блокове, за някои добри старомодни printf отстраняване на грешки.

Оригинален отговор:

Проблемът е, че увивате променливите си в единични кавички. Ако ги увиете в единични кавички, PHP не оценява стойността на променливата. Например, вместо да предава root като втори аргумент, вие предавате $username . В крайна сметка се опитвате да влезете в сървър, наречен $localhost с потребител, наречен $username с парола $password .

Разгледайте страницата за документация на PHP за низове . Това обяснява това:

Ако искате да използвате променливи вътре в низ, трябва да използвате double цитати, не единични. В този случай обаче дори не е необходимо да обвивате тези променливи в кавички, защото техните стойности са вече струни. Можете просто да предадете променливата сама. Опитайте това:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Задайте пресечна точка в MySQL:чист начин

  2. Как да преминете през набор от резултати на mysql

  3. Миграция на база данни Grails на внедрен сървър

  4. Грешка при зареждане на модула MySQLdb и инсталиране на pip MySQLdb

  5. SpringBoot MySQL JDBC Не може да се създадат първоначални връзки на пула