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

Предупреждение:mysql_query():предоставеният аргумент не е валиден ресурс на MySQL-Link

Въз основа на коментарите изглежда, че проблемът е причинен от използването на require_once() вътре във функция.

Случва се едно от двете неща. Или:

  1. Вече сте включили Connection.php някъде другаде, така че когато стигнете до функцията, тя всъщност не е включена.. поради веднъж част от require_once .

    или...

  2. Тона работи първия път, когато извикате функцията, но втория път, когато я извикате, файлът вече е включен и не се включва отново.

Проблемът е, че когато файлът е включен за първи път (ако приемем, че е от тази функция), $connection променливата се създава в обхвата на функцията и като всяка друга променлива на функцията я няма в края на функцията. Когато извикате функцията втори път, включването не се случва, защото използвате require_once .

Вероятно бихте могли да поправите това, като извикате require() вместо require_once() , но това ще доведе до повторно свързване с базата данни всеки път, когато извикате функцията - което е много ненужни режийни разходи. Много по-чисто е просто да преместите включването извън функцията и или да прехвърлите връзката във функцията, или да я използвате като глобална променлива.

Това би изглеждало така:

require_once('Connection.php');

function getResult() {
    global $connection;

    $findQuery = "SELECT * FROM `Keys` WHERE `ID` = '$gID'";
    $findResult = mysql_query($findQuery, $connection) or die(mysql_error());
    $resultRow = mysql_fetch_assoc($findResult) or die(mysql_error());
} 

Като се има предвид всичко това, има 2 основни проблема с този код.

  1. Използвате mysql_* функции, които са остарели и скоро ще бъдат премахнати от новите версии на PHP. Вижте този въпрос за повече подробности:Защо трябва Не използвам ли mysql_* функции в PHP?

    Всъщност не е толкова трудно да преминете към нещо като mysqli_* функции вместо това - има необектен набор от функции, които са почти идентични с това, което използвате сега.

  2. Включвате променлива в заявката си, без да я избягвате правилно. Най-малкото трябва да извикате mysql_real_escape_string() (или mysqli_real_escape_string() ), но по-доброто решение е да разгледате подготвени изявления. Можете да намерите повече информация за подготвените изявления тук:Как мога да предотвратя SQL инжектирането в 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. Получаване на mysql резултат от последните 30 дни

  2. Таблицата за миграция на Laravel вече съществува, но искам да добавя нова, а не по-стара

  3. MySQLdb на Python не може да намери libmysqlclient.dylib с Homebrewed MySQL

  4. mysqlworkbench дава грешка във версията при експортиране на база данни

  5. Получаване на данни от падащо меню за множествен избор с PHP за вмъкване в MySQL