2015-04-23 79 views
0

這ISDB連接,給出錯誤DBD :: mysql的:: ST fetchrow_array失敗:取()不執行()僅適用於DELETE語句

$DBH = DBI->connect("dbi:mysql:$DATABASE","$USER","$PASS",{ RaiseError => 1, AutoCommit => 1 }) or die "Connection Error: $DBI::errstr\n"; 

和下面的代碼,

$sth=$DBH->prepare("DELETE FROM sample where id=1 ") or warn $DBH->errstr; 
$sth->execute or die "can't execute the query: $sth->errstr"; 
while(@row = $sth->fetchrow_array()){ 
       $count+=$sth->rows; 
} 

的上面的代碼給了我的錯誤,

DBD :: mysql的:: ST fetchrow_array失敗:取()不執行()..

但是,當我使用select * from sample where id=1然後它運行。它只給我錯誤delete statement。爲什麼這樣? 幫助!感謝名單!

+0

一個'delete'語句不返回任何行。它只返回已刪除的行數。 – Tensibai

+0

@Tensibai我們可以計算刪除行 – Pranay

+0

嘗試搜索文檔,我沒有做Perl,但我發現[this](http://search.cpan.org/~timb/DBI-1.633/DBI.pm#rows )在DBI文檔中。 – Tensibai

回答

1

您不能使用刪除指令來執行fetchrow,它僅用於檢索數據。
你認爲它應該返回什麼?

從DBI文檔

對於非SELECT語句,execute返回受影響,如果知道的行數。如果沒有行受到影響,則執行返回「0E0」,Perl會將其視爲0,但將視爲true。請注意,沒有行受到語句的影響並不是錯誤。如果受影響的行數未知,則執行返回-1。

你不需要做fetchrow,只是:

my $affected_row = $sth->execute or die "can't execute the query: $sth->errstr"; 
+0

我想計算刪除行數。它不會返回受影響的行。刪除一些affet事件的權利。 – Pranay

+0

@Pranay:看我的編輯。 – Toto

+0

然後打印0E0 – Pranay