Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Ostrzeżenie:mysql_query():podany argument nie jest prawidłowym zasobem MySQL-Link

Na podstawie komentarzy wygląda na to, że problem jest spowodowany użyciem require_once() wewnątrz funkcji.

Dzieje się jedna z dwóch rzeczy. Albo:

  1. Dodałeś już Connection.php gdzie indziej, więc kiedy dojdziesz do funkcji, tak naprawdę nie jest ona uwzględniana... z powodu razu część require_once .

    lub...

  2. To jest działa przy pierwszym wywołaniu funkcji, ale przy drugim wywołaniu plik został już dołączony i nie jest ponownie dołączany.

Problem polega na tym, że gdy plik jest dołączany po raz pierwszy (zakładając, że pochodzi z tej funkcji), $connection zmienna jest tworzona w zakresie funkcji i jak każda inna zmienna funkcji znika na końcu funkcji. Kiedy wywołujesz funkcję po raz drugi, dołączanie nie następuje, ponieważ używasz require_once .

Prawdopodobnie możesz to naprawić, wywołując require() zamiast require_once() , ale spowoduje to ponowne łączenie się z bazą danych za każdym razem, gdy wywołasz funkcję - co jest bardzo niepotrzebnym obciążeniem. O wiele czystsze jest po prostu przeniesienie dołączenia poza funkcję i albo przekazanie połączenia do funkcji, albo użycie go jako zmiennej globalnej.

To wyglądałoby tak:

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());
} 

Biorąc to wszystko pod uwagę, są 2 główne problemy z tym kodem.

  1. Używasz mysql_* funkcje, które są przestarzałe i wkrótce zostaną usunięte z nowych wersji PHP. Zobacz to pytanie, aby uzyskać więcej informacji:Dlaczego nie używam funkcji mysql_* w PHP?

    Właściwie nie jest tak trudno przełączyć się na coś takiego jak mysqli_* funkcje zamiast tego - istnieje nieobiektowy zestaw funkcji, które są prawie identyczne z tym, którego używasz teraz.

  2. Dołączasz zmienną do zapytania bez prawidłowego jej zmiany znaczenia. Przynajmniej powinieneś wywołać mysql_real_escape_string() (lub mysqli_real_escape_string() ), ale lepszym rozwiązaniem jest zajrzenie do przygotowanych zestawień. Więcej informacji na temat przygotowanych wyciągów znajdziesz tutaj:Jak mogę zapobiec wstrzykiwaniu SQL w 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. Funkcja rankingowa w MySQL

  2. Błąd wstawiania MySQL:ER_BAD_FIELD_ERROR:Nieznana kolumna „2525” w „liście pól”

  3. php mysql wyszukiwanie pełnotekstowe:lucene, sfinks, czy?

  4. CodeIgniter:Przechowywanie obrazu w bazie danych?

  5. Zasób MySQL jest chwilowo niedostępny