Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dbi的perl中的一个简单错误_Perl_Oracle_Dbi - Fatal编程技术网

使用dbi的perl中的一个简单错误

使用dbi的perl中的一个简单错误,perl,oracle,dbi,Perl,Oracle,Dbi,我的prepare语句中有一个错误 $sqlst = $dbh->prepare('SELECT * FROM starter_trot WHERE UserId = 2345' ) or die "Couldn't prepare statement: " . $dbh->errstr; $sqlst->execute($userid) or die "Couldn't execute statement: " . $sqlst->errstr; my @data; p

我的prepare语句中有一个错误

$sqlst = $dbh->prepare('SELECT * FROM starter_trot WHERE UserId = 2345' ) or die "Couldn't prepare statement: " . $dbh->errstr;
$sqlst->execute($userid) or die "Couldn't execute statement: " . $sqlst->errstr;
my @data;
print"hai";
while (@data = $sqlst->fetchrow_array())
{
print "**";
}
execute语句和prepare语句肯定不会失败

[WHERE UserId=2345]这是它失败的部分。当我在db中运行查询时,它会重新运行值。但是当我通过脚本运行查询时,它失败了(但没有编译或运行时问题)。问题出在哪里。我们是否需要准备?(绑定变量而不是实际值?) ~
~

数据库可能会将列名返回为大写。尝试:

$sqlst = $dbh->prepare('SELECT * FROM starter_trot WHERE USERID = 2345' ) or        die "Couldn't prepare statement: " . $dbh->errstr;
$sqlst->execute($userid) or die "Couldn't execute statement: " . $sqlst->errstr;

我打赌它会起作用。

使用strict,使用warnings,当使用DBI时,使用RaiseError。当SQL语句中没有占位符时,将使用一个绑定值执行。当然,您应该按照自己的方式查看错误消息(因为PrintError是默认设置),但是RaiseError比到处喷洒“或死亡…”更容易。

整个错误消息是什么?请尝试将\n添加到打印字符串的末尾;可能输出正在缓冲?没有错误消息..我没有在数组中获取结果集..如何检查您没有在数组中获取结果集?由于您正在为获得的每一行设置@data,一个空行可能会核化您的
@data
?如果您(a)将查询更改为
从DUAL
中选择1234,会发生什么情况,(b)从
execute()
中删除不需要的参数,以及(c)在每次
print
调用的末尾添加换行符?我的错-我刚想到,当通过fetchrow\u散列访问列名时,您必须使用大写。Oracle不在乎列名/表名是用大写还是小写拼写。除非您在它们周围加引号。@runrig-Oracle不会,但DBI在使用fetchrow\u hash获取数据时会这样做。我在OP中看不到fetchrow\u hashref,也看不到任何类型的列名获取。哈希键的上/下大小写可以通过FetchHashKeyName属性进行控制(通常在获取哈希时最好始终使用该属性)。