Autor Zpráva
Peet
Profil
Zdravím mám dvě tabulky

favorits(user_id,movie_id);

když použiji tento dotaz

$movies=$mysql->query("
  SELECT id,movie_id FROM movies M
  INNER JOIN favorits F 
  ON F.movie_id=M.id  
  WHERE F.user_id=".$_SESSION['user']['id']." ");

tak vše funguje jak má

dále mám tabulku
pays(id,movie_id,user_id,pay)

a když použiju stejný dotaz

$movies=$mysql->query("
  SELECT id,movie_id FROM movies M
  INNER JOIN pays P 
  ON P.movie_id=M.id  
  WHERE P.user_id=".$_SESSION['user']['id']." ");

tak to napíše
Fatal error: Call to a member function fetch_assoc()

nevím jestli to není tím že v tabulce pays mám sloupec movie_id nastavený jako FOREIGN KEY
Tori
Profil
Jaká DB vrstva? Co přesně dělá metoda query, resp. kde se volá ta fetch_assoc?
Peet
Profil
používám mysqli, fetch_assoc() volám ve while

while($movie=$movies->fetch_assoc()){
.
.
.
}



nejde mi do hlavy proč u jednoho to jde a u druhého příkladu ne. Má s tím něco společného FK ?
Tori
Profil
Peet:
nejde mi do hlavy proč u jednoho to jde a u druhého příkladu ne
Z popisu chyby vyplývá, že metoda query nevrátila objekt. V manuálu vidíte, že při chybě v dotazu vrací FALSE. Popis chyby najdete v mysqli::$error. (Tipuju, že sloupec id je nejednoznačný.)
Virtus
Profil
Tori:
Tipuju, že sloupec id je nejednoznačný.
Taky bych to tak tipnul.

Peet:
Pokud v dotazu spojujete víc jak jednu tabulku, vždy dávejte před názvy sloupců alias/název tabulky, ze který sloupec chcete vybrat, vyhnete se tak spoustě problémů, které mohou nastat, příklad:
$movies=$mysql->query("
  SELECT M.id,P.movie_id FROM movies M
  INNER JOIN pays P 
  ON P.movie_id=M.id  
  WHERE P.user_id=".$_SESSION['user']['id']." ");
MartinR
Profil
A co vrátí databáze v případě, že ten dotaz spustíš přímo v ní? Jistě používáš i adminer nebo phpmyadmin nebo prostě jen konzoli.

SELECT id,movie_id FROM movies M
  INNER JOIN pays P 
  ON P.movie_id=M.id  
  WHERE P.user_id=1;

Z vrácené chyby jistě poznáš co je špatně. Např. column ambiguously defined ..
Peet
Profil
Super děkuji moc, vůbec mi to nedošlo :) děkuji vše funguje

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0