This took a while to track down, since it appeared to be a bug in MySQL.
If there is table with a field name of just "i", the code in the function dbQuery will fail and return a truncated/corrupted result set.
The problem appears to be the $i loop variable counter and this line:
$result[$i][$field] = $$field;
If you just change the $i loop variable name to something that will not likely be any MySQL field name, the code again works. I changed it to $ixxx in three places in this one function.
I'm going to guess the same or similar thing will happen if you have fields named the same as any variable used in this function: args, query, smt, res, fields, result as the expression $$field will resolve to the local PHP variable name and not the MySQL field name intended (I'm not sure why that is the case).
As I said previously, this is a great set of functions/tools to get started with prepared statements, and I have depended on it extensively. Thank you for the code.