On Tuesday 10 February 2009 9:22:26 pm David Metzler wrote:
This was a primary concern for me. I still haven't figured out why database drivers never do this....? It seems so straightforward to think of parameters as key value pairs. What I did here was to rewrite the parameters array into one that was numerically based because hey the postgres driver needed numerical bind arguments. I just got tired of hand rolling arrays arrays as parameters when I had a perfectly good $form_values array or simplexml object to use as the parameter source.
If DBTNG allows extra parameters to be passed that don't get used in the query then it's probably close enough for what most people need, and the XML to array conversion api would get you the rest of the way there anyway.
PDO gets cranky if your argument count does not exactly match your placeholder count. DBTNG doesn't do any extra checking on top of that for you, so yes you do need to make sure you pass in only those values that you need and nothing else. Some databases support reusing placeholders. Some do not. Who knows why; database vendors are silly people. PDO has gone back and forth on whether it tries to emulate reuse on databases that don't natively support it or not (a process that was frequently buggy, according to PDO's principal author, Wez Furlong), creating a situation where unless you know your precise version down to the .z level you can't reliably assume that it's going to work. So we assume that you can't reuse placeholders. Any XML-to-array conversion should happen outside the DB layer, IMO. -- Larry Garfield larry@garfieldtech.com