Ubercart query: db_query('SELECT nid FROM uc_products'); nem ad vissza eredményhalmazt. Miért?

Sk8erPeter képe

Sziasztok!

Van egy engedélyezett és működő Ubercartom, jelenleg 8 termékkel. Ha lefuttatom a következőt, az semmilyen eredményhalmazt nem ad vissza:

  1. $result = db_query('SELECT nid FROM uc_products');
  2. while ($nid = db_result($result)) {
  3. dsm('$nid:');
  4. dsm($nid.'. nid');
  5. }

Ezzel szemben a következő kettő query hibátlanul működik:

  1. $result = db_query('SELECT * FROM uc_products');
  2. dsm('SELECT * testing...');
  3. while ($row = db_fetch_object($result)) {
  4. dsm('$row->nid:');
  5. dsm($row->nid.'. nid');
  6. }
  7.  
  8. $result = db_query('SELECT nid FROM node');
  9. dsm('node table');
  10. while ($nid = db_result($result)) {
  11. dsm('$nid:');
  12. dsm($nid.'. nid');
  13. }

phpMyAdminban a legelső query-t lefuttatva az eredmény az elvártak szerint néz ki: http://i.imgur.com/nP39G.png

Ugyanezt a problémát leírtam itt is.

A probléma számomra teljesen misztikus, nézegettem a db_query, db_result függvényeket, egyiket sem módosítottam. Valamilyen oknál fogva azonban pont az uc_products táblánál eltűnnek az éterben az eredmények, az Ubercart beépített moduljainál sem működik helyesen - pont a fenti query szerepel pl. a Conditional Actions modulnál is, amikor termékre szűrök.

Van BÁRMI tippetek, hol kezdjem el a kotorászást? Legegyszerűbb egy szimpla update lenne vélhetően, de egyrészt csak akkor derül ki, hogy megoldódik-e (ami valószínű), amikor már megcsináltam, másrészt már érdekelne, mi lehet vajon a probléma forrása, mert ilyennel még nem találkoztam.

Bármi tippet szívesen fogadok. Köszi!

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
Sk8erPeter képe

Ja igen, és egy screenshot a jelenségről az állítás igazolására:
http://i.imgur.com/FhAuY.png

Konkrétan ezt futtattam le, látható, hogy az első két query után semmilyen eredmény nem látható, míg a többinél helyes eredmények szerepelnek (még a vid lekérése is jól működik!!!):

  1. $query = 'SELECT nid FROM uc_products';
  2. $result = db_query($query);
  3. dsm('===================================================');
  4. dsm($query);
  5. while ($nid = db_result($result)) {
  6. dsm('$nid: '.$nid);
  7. }
  8.  
  9. $query = 'SELECT up.nid AS asdasd FROM uc_products AS up';
  10. $result = db_query($query);
  11. dsm('===================================================');
  12. dsm($query);
  13. while ($nid = db_result($result)) {
  14. dsm('$nid: '.$nid);
  15. }
  16.  
  17. $query = 'SELECT vid FROM uc_products';
  18. $result = db_query($query);
  19. dsm('===================================================');
  20. dsm($query);
  21. while ($vid = db_result($result)) {
  22. dsm('$vid: '.$vid);
  23. }
  24.  
  25. $query = 'SELECT * FROM uc_products';
  26. $result = db_query($query);
  27. dsm('===================================================');
  28. dsm($query);
  29. while ($row = db_fetch_object($result)) {
  30. dsm('$row->nid: '.$row->nid);
  31. }
  32.  
  33. $query = 'SELECT nid FROM node';
  34. $result = db_query($query);
  35. dsm('===================================================');
  36. dsm($query);
  37. while ($nid = db_result($result)) {
  38. dsm('$nid: '.$nid);
  39. }

Még annyi, hogy nincs a tábláknál előtag (mondjuk a node-nál ez már kiderül), tehát az nem számít jelen esetben, hogy {uc_products}-ot vagy a kapcsos zárójel nélküli változatot használom.

A query-knél a vid lekérése a legérdekesebb, hogy az akkor vajon miért működik helyesen, a nid lekérése miért nem, miközben ezek típusa az adatbázisban tök ugyanaz (unsigned int).... NEM ÉRTEM!

0
0
Bálint képe

Félreérted a db_result() használatát. Ezt a függvényt akkor használd, ha pontosan egyelemű eredményhalmazt vársz a lekérdezésedtől egyetlen mezőt lekérdezve. Ekkor nincs szükséged ciklusra sem.

Jó mintának pl. az aggregator_block() függvény. Nézd meg, mikor és hogyan van használatban a db_result(), és mikor a db_fetch_object() egy ciklussal.

0
0
Sk8erPeter képe

Nézd meg az uc_order_condition_has_products_form() függvényt, egész pontosan onnan szedtem ezt. Most nem arra voltam kíváncsi, hogy helyes-e ennek a használata (igazad van, hogy alapvetően szerintem sem erre használandó), hanem hogy ez miért nem működik az uc_products tábla esetén a nid lekérdezésekor, miközben a vid vagy a node tábla nid mezőjének lekérdezése esetén pontosan ugyanígy használva a db_results() függvényt a query hibátlanul lefut.

Egyébként a db_result() függvényt én is inkább olyan esetekben szoktam használni, amilyen példát említettél! Ettől függetlenül ez a használat sem hibás egyébként, tehát működnie kellene. Működik is ugyanez másik, tesztcélú Drupal 6 esetében!
A Conditional Actions használatához pedig ennek működnie kell, ha arra szeretnék szűrni, hogy vajon adott rendelésben benne vannak-e megadott termékek, vagy kénytelen lennék minden esetleg hasonló használat esetén módosítani a modul(ok) fájljait.

Egyébként köszi, hogy foglalkozol a dologgal. ;)
Bármi tipp arra, hogy vajon miért nem adja vissza az elvárt eredményhalmazt?

0
0