【问题标题】:Addition of a mysql value in perl using placeholders使用占位符在 perl 中添加 mysql 值
【发布时间】:2012-03-08 02:24:54
【问题描述】:

我想为数据库中已经存在的 mysql 值添加一个值。我知道你可以这样做:

 my $sql1 =qq(UPDATE genotype SET Tally=Tally+10);

但是,我希望“+10”作为占位符,因为该值会根据程序所在的 for 循环迭代而有所不同。我编写了以下内容,但是它不起作用:

my $sql1 =qq(UPDATE genotype SET Tally=Tally + ?);
my $sth1 = $dbh_m-> prepare($sql1);

$sth1->execute($ParentTally);

这里可以使用占位符吗?我也写过:

my $sql5 =qq(SELECT Tally FROM genotype);
my $sth5 = $dbh_m-> prepare($sql5); 

$sth5->execute();
my $newTally;

while (my $ChosenTally = $sth5 ->fetch){
    for my $field (@$ChosenTally){
        $newTally=$field;
    }
}

$newTally+=$ParentTally;


my $sql6 =qq(UPDATE genotype SET Tally= ?);
my $sth6 = $dbh_m-> prepare($sql6); 

$sth6->execute($newTally);

上面的代码确实有效,但是如果可能的话,我想减少我的程序与数据库的连接数。

谢谢

【问题讨论】:

    标签: mysql perl placeholder


    【解决方案1】:

    您可以在查询执行之前使用bind_param 传递值:

    my $sth = $dbh->prepare( $query_with_placeholder );
    
    for my $int ( 1 .. 10 ) {
        $sth->bind_param(1, $int, SQL_INTEGER );
        $sth->execute;
    }
    

    或者,只需将$int 传递给execute

    $sth->execute( $_ ) for 1 .. 10 ;
    

    【讨论】:

    • 谢谢,但是我仍然不明白如何让它将数字添加到数据库中已经存在的值中,当我尝试这个时它不会添加到已经存在的值中. (例如数据库的值为 10,ParentTally 的值为 10,所以我希望数据库中的新总值为 20)
    猜你喜欢
    • 1970-01-01
    • 2015-01-23
    • 2017-06-10
    • 2015-08-31
    • 2011-01-04
    • 2019-07-04
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多