bind_param not working with negative values ?
am 20.10.2005 13:55:58 von Dani--------------050005060004060802030501
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Hi,
I am using DBI version 1.48 and DBD::mysql 3.0002 to run a very simple
script (the original one is much bigger, this is just to show the
problem), and I get an error when trying to select data, passing a
negative argument to the bind_param call. Using the trace I get the
following messages:
-> bind_param for DBD::mysql::st
(DBI::st=HASH(0x140130a90)~0x140130a80 2 '-1' -6)
<- bind_param= 1 at ./test_dbi.pl line 23
but when trying to execute the query, the -1 it is not there:
Binding parameters: SELECT * from transcript where gene_id = 95536 and
seq_region_strand =
However, if I change the SQL_TYPE from SQL_INTEGER or SQL_TINYINT to
SQL_CHAR, the script works fine. Had anyone seen a similar behaviour ??
And if I run the same script in a much older version of DBI (1.21) and
DBD::mysql (2.0419), the script works fine with the SQL_TINYINT as the
type for the negative number.
One solution would be using the SQL_CHAR type for negative numbers, but
apart from being not really elegant, I think I might run into problems
when I use a different database (like Oracle).
How can I fix this problem ?
Thanks for your help,
Daniel.
--
------------------------------------------------
Daniel Rios Phone: +44 (0) 1223 494684
Ensembl developer Fax: +44 (0) 1223 494468
EMBL-EBI
Wellcome Trust Genome Campus, Hinxton
Cambridge CB10 1SD UK
------------------------------------------------
--------------050005060004060802030501
Content-Type: text/plain;
name="test_dbi.pl"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="test_dbi.pl"
#!/usr/local/ensembl/bin/perl
use warnings;
use strict;
use DBI;
use DBI qw(:sql_types);
use Data::Dumper;
my $db = 'homo_sapiens_core_34_35g';
my $host = 'ensembldb.ensembl.org';
my $port = 3306;
my $username = 'anonymous';
my $password = '';
my $driver = 'mysql';
my $dsn = "DBI:$driver:database=$db;host=$host;port=$port;mysql_local_ infile=1";
my $dbh = DBI->connect($dsn,$username, $password,{'RaiseError' =>1});
my $gene_id = 95536;
my $strand = -1;
my $sth = $dbh->prepare("SELECT * from transcript where gene_id = ? and seq_region_strand = ?");
$sth->bind_param(1,$gene_id,SQL_INTEGER);
$sth->bind_param(2,$strand,SQL_TINYINT);
$sth->execute();
print Dumper($sth->dump_results),"\n";
--------------050005060004060802030501--