Re: Clarification on DBI module



On Thu, May 10, 2007 at 02:50:10PM +0200, Peter J. Holzer wrote:
On 2007-05-10 07:50:16 -0400, Jeffrey Seger wrote:
On your execution without a bound value, are you actually looking for rows
where the empno column is null? If so, try this:

instead of
my @bind1 = ();
try:
my @bind1 = (undef);

Otherwise, what exactly are you looking for?

As I understood Ramesh, the code wasn't supposed to do anything useful.
He expected an error (e.g. "DBD::Oracle::st execute failed: called with
0 bind variables when 1 are needed"), but instead got a result.

While the behaviour is documented (if you read closely enough), and also
useful, it is somewhat surprising:

When you use 2 placeholders in your query, and then invoke execute with
1 or 3 parameters, you get an error, that the number of bind variables
doesn't match the prepared query. But if you invoke execute with 0
parameters, you don't get such an error.

I don't see how this behaviour could be changed without breaking
existing code, though.

It can't as there's no way [*] for the execute() to distinguish
between $sth->execute() and $sth->execute(@empty_array).

Tim.

[*] Well, no sufficiently easy way. I could write the C code to dig
through perls internal op tree to see if there was an argument array,
but that seems like more pain than gain. Patches welcome, naturally.
.