Maybe I'm looking at this the wrong way, but would you need to quote non-scalars if you were sticking to the prepare + execute method?
Updated:
Doesn't the $dbh->do() method skip all DBI internal SQL checking and send it "as-is" for the database to figure out? I remember reading this somehere, and it occured to me that by using the method you had stated above, you could be running into SQL syntax problems if the quoting part didn't work out. Just a thought.
The DBI::do() method replaces both prepare() and execute(), though it has to go through those steps anyway. If you're going to do any sort of looping, it's inefficient and you'll get much better performance with a little more typing.
btrott's last suggestion is right on top of things.