PDA

View Full Version : The difference between mysql_fetch_array and $db->fetch_array?


Attilitus
21 Jan 2007, 13:49
I have a script which works perfectly with mysql_fetch_array($result), however, when switching it to $db->fetch_array($result) it does not work. It does not give an error, it simply does not return a result.

Is there something fundamentally different between vbulletin's database class fetch_array and mysql_fetch_array?

(All other database class functions are working just fine... I have query_read within the same function and it works perfectly)

thincom2000
21 Jan 2007, 18:53
I read somewhere that $db->fetch_array() uses fewer resources than mysql_fetch_array() and mysql_fetch_assoc(), but I looked at the code in class_core.php recently, and I think I remember seeing that it was merely a difference of semantics.

Then again, I'm no expert. :)

Danny.VBT
21 Jan 2007, 18:56
It is simply a wrapper to the mysql_fetch_array function. If you are programming a vBulletin modification, you should use $db->fetch_array() to follow vBulletin's coding standards.

Can you post the two lines of code with mysql_fetch_array and $db->fetch_array?

Attilitus
21 Jan 2007, 20:09
I actually was able to find a solution by using $db->fetch_row. The problem was that I was using numeric keys for certain result sets (which was something I would have prefered not to change because it was quite useful.)

Oddly enough $db->fetch_array does not appear to be fully inter-changable with mysql_fetch_array in this regard. But as I said $db->fetch_row worked perfectly in those specific cases.

Kentaurus
21 Jan 2007, 20:10
Abstraction. Since $db->fetch_array is wrapper, if you changed your database, mysql version, implementation details or wanted to add extra behaviour, $db->fetch_array provides a way to do so, since all the code would use an abstraction and not the direct mysql code.

Meaning... it would be a best practice to use $db->fetch_array if you are coding for Vbulletin

I actually was able to find a solution by using $db->fetch_row. The problem was that I was using numeric keys for certain result sets (which was something I would have prefered not to change because it was quite useful.)

Oddly enough $db->fetch_array does not appear to be fully inter-changable with mysql_fetch_array in this regard.

It's actually the equivalent of calling:

mysql_fetch_array($result, MYSQL_ASSOC)

and not plain mysql_fetch_array

Attilitus
21 Jan 2007, 20:13
Ha ha... I was never considering NOT using the vbulletin database class. I was just trying to find the right parameter that I needed. Certainly it is alright to use vbulletin's databaseclass function $db->fetch_row. Correct?

Kentaurus
21 Jan 2007, 21:14
Correct :) Or rename the columns in your query. Both strategies are fine.