ugrás a tartalomhoz

LEFT JOIN+mysql_fetch_array nem ad vissza mindent

saxus · 2005. Jún. 30. (Cs), 14.57
Van egy SQL kérésem, ahol LEFT JOIN-nal hozzácsaptam egy táblához néhány mezőt (fórum hozzászólásaihoz az user adatokat) és a mysql_fetch_array() -jel nem adja vissza a júzerek tábla oszlopait, még ha *-t írok, akkor sem. A mysql_num_fields() visszaadja a rendes oszlopszámot.

Viszont a mysql_fetch_object() visszaadja az összeset, csak azt nem értem, hogy miért nem megy ez fetch_array-jel. Van erre valakinek ötlete?

A PHP Doksi szerint a mysql_fetch_object() kb ugyanolyan gyors, mint a mysql_fetch_array(), csak tudomásom szerint PHP-ben az objectek több memóriát foglalnak, én meg szeretek mindent minél jobban optimalizálni.
 
1

Mennie kell

Török Gábor · 2005. Jún. 30. (Cs), 15.02
Egészen biztos, hogy megy, mert én is temérdek helyen használtam/használom. Próbáld nyomkövetni, minden érintett változó tartalmát kiírattatni stb. Valami más hiba lesz, esetleg ha küldesz egy kis kódrészletet...

Esetleg álnevek használata a mezőkhöz?

--
slink
http://20y.hu/
2

Kódrészlet

saxus · 2005. Jún. 30. (Cs), 15.44
Tudom, ránézésre nem így kell(ene) megoldani, de nekem kell még az, hogy egyben lássan a dolgokat.

A PF_ a táblanév előtti prefixum.

$db->sql_query('SELECT PF_forum_messages.id, replyto, post_date, userid, message, PF_users.name, PF_users.email_public, PF_users.user_sig, PF_users.forum_messages FROM PF_forum_messages
LEFT JOIN PF_users ON (PF_forum_messages.userid = PF_users.id)
WHERE PF_forum_messages.tid='.$t['id'].' ORDER BY PF_forum_messages.post_date DESC LIMIT '.$min.', '.$conf['forum_posts_per_page']);

// A szám az stimmel (9)
echo $db->sql_num_field();

// Üzenetek lekérdezése

while ( $mrow = $db->sql_fetch_array( $db->res )) {
  $messages[] = $mrow;
}

// És nincsenek benne, csak ha mysql_fetch_object -t használok.
print_r($messages);

while ( list(,$row) = each ( $messages ) ) {
  // Szintén nincs benne
  print_r( $row );
}


A másik ugyanez, csak értelem szerűen más parancsok. Az SQL réteg saját, nagyon egyszerű, csak a hibakezelés miatt van így megoldva, meg így egyszerűen lehet cserélni PostgreSQL-re, vagy akármi másra.

MySQL Control Center visszaadja az összes sort, nem tudom, hogy az melyik függvénnyel kéri le.

PHP 4.3.7, Windows XP SP2, MySQL 4.1.18
4

Lehet hogy a $db

Anonymous · 2005. Jún. 30. (Cs), 15.52
Lehet hogy a $db osztályoddal van a gond. Azt nem tudnád beszurni.
Probáld végrehajtani a műveleteket az osztályod nélkül.
3

print_r

Anonymous · 2005. Jún. 30. (Cs), 15.46
Probáld meg a mysql_fetch_array()-el kapott tombot kiiratni a print_r függvénnyel, hátha csak rossz tömbelemekre hivatkozol.

ui: Én mindig a mysql_fetch_array-t használom és még nem volt vele probléma
5

Alias

saxus · 2005. Jún. 30. (Cs), 15.55
Az alias megoldotta a problémát. Köszönöm a segítséget.