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

Предупреждение:mysql_query():3 не е валиден ресурс на MySQL-Link

PHP използва ресурси като специална променлива за поддържане на връзки към външни обекти, като файлове и връзки към базата данни. На всеки ресурс се дава целочислен идентификатор. (Документация )

Неуспешни връзки

Ако връзката с базата данни не успее, вероятно ще получите грешка „Посочената променлива не е валиден ресурс на MySQL-Link“, както спомена Дан Брийн, тъй като променливата, която трябва да държи ресурса, е нула.

$link = mysql_connect('localsoth','baduser','badpass'); // failed connection
$result = mysql_query("SELECT 1", $link); // throws error

Тъй като получавате конкретен идентификатор на ресурс в съобщението за грешка, връзката с базата данни вероятно е затворена неочаквано по някаква причина. Вашата програма все още има променлива с идентификатор на ресурса, но външният обект вече не съществува. Това може се дължи на mysql_close() обадете се някъде преди извикването на mysql_query , или грешка във външна база данни, която затвори връзката.

$link = mysql_connect();
mysql_close($link);
// $link may still contain a resource identifier, but the external object is gone
mysql_query("SELECT 1", $link);

Повторно използване на връзки

Проблем с разширението mysql и mysql_connect() е, че по подразбиране, ако подадете същите параметри в последователни повиквания, тя ще използва повторно съществуващата връзка, вместо да създава нова (Документация ). Това може да се поправи чрез подаване на true към $new_link параметър.
Лично аз се сблъсках с това в тестова система, където данните от две отделни бази данни в производството бяха комбинирани на един тестов сървър и при тестване на mysql_xxx() извикванията на функции преминаха един през друг и счупиха системата.

$link1 = mysql_connect('localhost','user','pass'); // resource id 1 is given
$link2 = mysql_connect('localhost','user','pass'); // resource id 1 is given again
mysql_close($link2); // the connection at resource id 1 is closed
mysql_query("SELECT 1", $link1); // will fail, since the connection was closed

Използване на $new_link :

$link1 = mysql_connect('localhost','user','pass'); // resource id 1 is given
$link2 = mysql_connect('localhost','user','pass', true); // resource id 2 is given
mysql_close($link2); // the connection at resource id 2 is closed
mysql_query("SELECT 1", $link1); // the connection at resource id 1 is still open

Редактиране:
Като настрана бих препоръчал използването на MySQLi разширение или PDO вместо това, ако е възможно. Разширението MySQL става доста остаряло и не може да се възползва от функции след MySQL версия 4.1.3. Вижте http://www.php.net/manual/en/mysqli .overview.php за някои подробности относно разликите между трите интерфейса.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLSTATE[42000]:Синтактична грешка или нарушение на достъпа:1064 Имате грешка във вашия SQL синтаксис — PHP — PDO

  2. Разбиране на размерите на съхранение за типовете данни на MySQL TEXT

  3. Остатъкът в PostgreSQL, MS SQL Server, MySQL и SQLite

  4. Обединяване на три таблици с помощта на MySQL

  5. 4 начина за замяна на NULL с различна стойност в MySQL