What DBD are you using?
From the DBI docs:
If any arguments are given, then "execute" will effec- tively call "bind_param" for each value before execut- ing the statement. Values bound in this way are usu- ally treated as "SQL_VARCHAR" types unless the driver can determine the correct type (which is rare), or unless "bind_param" (or "bind_param_inout") has already been used to specify the type.
So maybe the driver that you are using is guessing incorrectly as to the type of "2 89" and it treating it as an integer. If that is the case, it looks as if you might have stumbled upon a bug in the DBD.
Try doing a DBI->trace(2) (or higher up to level 9) to see what is going on inside the DBI/DBD, and if you are still stumped or if it looks like there might be a bug, post the information to dbi-users.
In the meantime you can probably explicity spell out the bind type of that placeholder using bind_param():
$insert_cmd = "INSERT INTO PhoneNumbers (cusID, adtID, pntID, phnPart1, phnPart2, phnPart3, phnExt) VALUES (?, ?, ?, ?, ?, ?, ?)"; $phone_insert = $gcssDBH->prepare($insert_cmd); $phone_insert->bind_param(6,undef,SQL_VARCHAR); #bind undef -- execute + will remember the bind type $phone_insert->execute( $row->{'cust_id'}, $adtID, $phoneNumberTypes->{'Day'}, $row->{'cust_phac'}, $row->{'cust_phpx'}, $row->{'cust_phsx'}, $row->{'cust_phex'} );
In reply to Re: Using placeholders, getting unexpected SQL errors
by tantarbobus
in thread Using placeholders, getting unexpected SQL errors
by ok
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |