4

perlDBIのbind_paramに関する問題があります。次のSQLが機能します。

my $sth = $dbh->prepare("SELECT id FROM table WHERE id = 'string'");
$sth->execute();

以下はそうではありませんが:

my $sth = $dbh->prepare("SELECT id FROM table WHERE id = ?");
$sth->execute('string');

最後のクエリで発生するエラーはです[ODBC SQL Server Driver][SQL Server]The data types nvarchar(max) and ntext are incompatible in the equal to operator. (SQL-42000)

bind_paramによって呼び出されるexecute、が'string'をntextにキャストするようです。どうすればそれを回避できますか?

4

1 に答える 1

5

SQL呼び出しの前に値型をバインドすることを検討してください。

use DBI qw(:sql_types);

my $sth = $dbh->prepare( "SELECT id FROM table WHERE id = ?" );

my $key = 'string';
my $sth->bind_param( 1, $key, SQL_VARCHAR );

$sth->execute();
于 2012-10-27T07:54:20.227 に答える