2011-05-24 30 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比遍佈各處的'或死亡'都容易。