使用fetchrow命令进行perl数据库连接

时间:2014-04-04 06:09:29

标签: perl database-connection

我使用perl代码连接数据库。以下是编译错误?

my $source_id = $syb_qp->fetchrow();

RHS正在返回一个阵列。 LHS是一个标量。

以下是它的一部分

my $syb_query="SELECT ms.source_id
                from message ms,message_ mpt
                where ms.msg=mpt.msg and mpt.pattern='$pattern'
                and ms.id = '$invid'" ;
my $syb_qp = $dbs->prepare($syb_query);
$syb_qp->execute();
my $source_id = $syb_qp->fetchrow();

然后我在表中插入$ source_id as -

my $ syb_query_insert =" INSERT INTO invocati(date,id,source,log_m,log_f)VALUES(' date',ABC, $ source_id ,&# 39; $图案'' $文件')&#34 ;;

以上代码将正常工作。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您使用的是哪个模块?我不知道任何fetchrow()方法。

如果使用DBIfetchrow_array()的文档说明:

  

如果在具有多个列的语句句柄的标量上下文中调用,则不确定驱动程序是返回第一列还是最后一列的值。所以不要这样做。此外,在标量上下文中,如果没有更多行或发生错误,则返回undef。由于第一个字段值为NULL,因此无法将undef与返回的undef区分开来。出于这些原因,如果在标量上下文中使用fetchrow_array,则应该谨慎行事。

因此,只需将LHS列入清单:

my ($source_id) = $syb_qp->fetchrow_array();

另外,我强烈建议您永远不要在SQL中包含变量,而是使用Placeholders and Bind Values

my $syb_query= q{SELECT ms.source_id
                from message ms,message_ mpt
                where ms.msg=mpt.msg and mpt.pattern=?
                and ms.id=?};
my $syb_qp = $dbs->prepare($syb_query);
$syb_qp->execute($pattern, $invid) or die $syb_qp->errstr;