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

Ostrzeżenie:mysql_result() oczekuje, że parametr 1 będzie zasobem, podana wartość logiczna

Problem polega na tym, że mysql_query() zwraca wartość logiczną zamiast zasobu wynikowego. Może się tak zdarzyć z dwóch powodów:

  1. Wykonałeś zapytanie, które zwraca sukces/niepowodzenie zamiast zestawu wyników (np. UPDATE )
  2. Twoje zapytanie nie powiodło się

W twoim przypadku zapytanie nie powiodło się. Powodem, dla którego się nie powiodło, jest to, że udało Ci się uciec przed tylnymi tikami w ciągu PHP, gdzie nie było takiej potrzeby.

Twoje linie wyglądają tak:

$siteTitle = mysql_result(mysql_query("SELECT \`siteTitle\` FROM siteSettings"), 0);

Kiedy powinny po prostu być takie:

$siteTitle = mysql_result(mysql_query("SELECT `siteTitle` FROM siteSettings"), 0);

Teraz kilka uwag pobocznych:

  • Nie pisz nowego kodu, który używa mysql_* Funkcje. Są przestarzałe i ostatecznie zostaną usunięte z PHP. Użyj MySQLi lub PDO zamiast tego (osobiście polecam PDO, YMMV)
  • Zagnieżdżanie funkcji bazy danych w ten sposób nie jest szczególnie dobrym sposobem pisania kodu. O wiele lepiej jest sprawdzać błędy bezpośrednio po każdym wywołaniu funkcji.

Na przykład:

$result = mysql_query("SELECT somecol FROM sometable");
if (!$result) {
  // Handle error here
}
// Now process the result
  • W zapytaniach należy cytować wszystkie identyfikatory lub żaden (najlepiej wszystkie). Cytowanie tylko niektórych utrudnia czytanie.

Np.

SELECT `siteTitle` FROM `siteSettings`



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odmowa dostępu Java JDBC dla użytkownika

  2. MySQL porównuje ciąg DATE z ciągiem z pola DATETIME

  3. Podział na strony MySQL bez podwójnego zapytania?

  4. Wyszukiwanie MySQL na liście przecinków

  5. Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/var/lib/mysql/mysql.sock' (2)