in reply to DBI placeholders
Well, after trying just about anything under the sun (ie, what I could find in the DBI docs, in Perlmonks and Google), after sifting through DBI->trace output (I, of course, always "use strict" and "-w" to begin with :), I tried to simply drop and re-create the table in the database.
Guess what, it worked. Apparently, my code wasn't broken, but something was misconfigured in the database. Boggle.
Anyway, thanks for all your helpful comments. I'll try the RaiseError thing; it looks useful.