2011-05-24 51 views
3

Perl中的一个简单的错误我在准备发言使用DBI

$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 "**"; 
} 

执行语句和准备语句,肯定不会失败一个错误。

[WHERE UserId = 2345]这是它失败的部分。当我在db中运行查询时,它会回退values.But当我通过脚本运行查询时,它失败(但没有编译或运行时问题)什么是问题。它在准备我们必须要付出吗?(绑定变量而不是实际值?) 〜 〜

+1

什么是整个错误信息? – 2011-05-24 12:53:56

+1

尝试将\ n添加到打印的字符串的末尾;也许输出只是被缓冲? – ysth 2011-05-24 13:27:33

+0

没有错误信息..我没有得到数组中的结果.... – user682571 2011-05-24 13:57:24

回答

0

数据库可能以大写字母的形式返回列名。尝试:

$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; 

我打赌它会工作。

+0

更改为大写不工作。无效的列名:( – user682571 2011-05-24 13:55:04

+0

我的坏 - 我想它是通过fetchrow_hash访问列名时,你必须以大写形式引用它们。 – wadesworld 2011-05-24 14:10:55

+0

Oracle不关心你是否拼写列/表名称,大小写除非你把引号括起来 – runrig 2011-05-24 15:03:41

3

严格使用警告,使用DBI时使用RaiseError。当您的SQL语句中没有占位符时,您正在执行一个绑定值。当然,你应该看到错误消息的方式(因为PrintError是默认的),但是RaiseError比遍布各处的'或死亡'都容易。