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

Przygotowane oświadczenie MYSQLI nie daje żadnych wyników

Twój początkowy problem polega na tym, że nie sprawdzałeś wszystkich wzywają do porażki, tylko nieliczni na starcie. Oba store_result i bind_result może również zawieść.

Twój konkretny problem (po naprawieniu początkowego) polega na tym, że robisz select * zdobyć wiele kolumny, ale wiążesz tylko jeden w wyniku. Widać to z komunikatu o błędzie, który otrzymujesz z bind_result zadzwoń:

Jeśli zmienisz select oświadczenie do czegoś takiego jak select id from ... , przekonasz się, że zaczyna działać.

Zakładając jednak, że chcesz więcej kolumn, powinieneś podać więcej zmiennych w wiązaniu, na przykład:

$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);

Zauważysz, że nie używam select * tam, lepiej jest używać jawnego nazewnictwa kolumn w prawie wszystkich sytuacjach, aby:

  • nie dziwisz się, gdy zmienia się schemat bazy danych;
  • otrzymujesz tylko te dane, których potrzebujesz;
  • możesz prawidłowo mapować kolumny na zmienne wyników.

Prawie tylko miejsce, które kiedykolwiek znalazłem, można użyć select * jest w narzędziach do analizy DB, w których chcesz uzyskać wszystko. Jeśli z góry wiesz, czego chcesz, powinieneś o to poprosić.



  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 poprawia SELECT prędkość

  2. Jak znaleźć n-tą pozycję w MySQL?

  3. zduplikowane wpisy mysql i php

  4. Django ManyToMany z wieloma bazami danych

  5. Raport z rachunkowości podwójnego zapisu