DBI 参数问题

给SQL语句动态地传入值的方法叫绑定(Bind), 在写数据库有关的角本时, 这是很重要的一点, 在Perl中你可以在SQL中写一个问号表示不确定的值, 不管是在SELECT还是在Insert/Update/Delete语句中, 都一样. 如下所示:

my $sth = $dbh->prepare( "select tname from tab
        where tname like ?");
......
my $sth = $dbh->prepare("Delete from test where col1=?");

    接下来在执行之前要传入真实的值和类型, bind_param就是用来传入值的, 第一个参数为问题的位置, 从1开始数; 第二个参数为变量的值; 第三个参数是可选的, 为参数的类型. 如下所示:

use strict:
use DBI;
USE DBI qw(:sql_types);

$sth->bind_param(1, "TEMP%");
$sth->bind_param(2, 2000);
$sth->bind_param(3, 2500, { TYPE=> SQL_VARCHAR });
$sth->bind_param(3, 2500, SQL_VARCHAR);

$sth->execute();

    在Perl中是不能按名字来绑定变量的, 即"COL1 = :p1 OR COL2 = :P1'这样的条件要写成"COL1 = ? OR COL2 = ?", 并且要传入二次参数. 在调用函数或存贮过程时, 经常会有转出类型的参数, 这时可以用bind_param_inout来实现, 例如有一个过程"p_test(v1 in number, v2 out number, v3 out number)", 要调用它的话, 要用如下写法:

my ($v1, $v2, $v3);
my $sth = $dbi->prepare("BEGIN P_TEST(?,?,?); END;");
$v1 = 123;
$sth->bind_param(1, $v1);
$sth->bind_param_inout(2, /$v2, 50);
$sth->bind_param_inout(2, /$v3, 50);
$sth->execute();

    常用的绑定类型有SQL_CHAR, SQL_NUMERIC, SQL_DECIMAL, SQL_INTEGER, SQL_SMALLINT, SQL_FLOAT, SQL_REAL, SQL_DOUBLE, SQL_DATE, SQL_TIME, SQL_TIMESTAMP, SQL_VARCHAR, SQL_LONGVARCHAR, SQL_BINARY, SQL_VARBINARY, SQL_LONGVARBINARY, SQL_BIGINT, SQL_TINYINT, SQL_BIT, SQL_WCHAR, SQL_WVARCHAR, SQL_WLONGVARCHAR. 除了上面的bind_param调用外, 也有更直接方便的方法来传入参数, 如:

my $sth = $dbh->prepare("select * from tab
   where tname like ?");
$sth->bind_param(1, "", SQL_VARCHAR);
$sth->execute("TEMP%");
......
$dbh->do("insert into test (col1) values (?)", 123);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值