我使用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 ;;
以上代码将正常工作。
任何帮助将不胜感激。
答案 0 :(得分:2)
您使用的是哪个模块?我不知道任何fetchrow()
方法。
如果使用DBI
,fetchrow_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;