2016-03-31 52 views
0

上VARCHAR計數我有一個簡單的SELECT語句:MySQL的選擇在PERL

$sql = "SELECT count(*) FROM member_temp WHERE member_Id = '".trim($id)."'"; 

member_Id列是一個VARCHAR(25)NOT NULL

這工作得很好,直到SELECT到達一個member_Id那有一個alpha值,如1126A。然後,它引發錯誤

Could not prepare SQL statement:SELECT count(*) FROM member_temp WHERE member_Id = '1126A'

作爲測試我刪除此記錄和SELECT運行正常,直到有A下一個值。

如何使這個查詢運行並處理帶有字母字符的記錄?

這是更大的代碼塊刪除不從主成員表中記錄的一部分:

while (@data = $sth->fetchrow_array()) { 

    my $id = $data[2]; 
    my $pk = $data[0]; 

    $sql = "SELECT count(*) FROM member_temp WHERE member_Id = '" . trim($id) . "'"; 
    #print "$sql\n"; 

    my $xth = $dbh->prepare($sql); 
    $xth->execute(); 

    $cRows = $xth->fetchrow_array() || die "Could not prepare SQL statement:$sql"; 
    #print "$cRows\n"; 

    if ($cRows == 0) { 
     $sql = "DELETE FROM member WHERE sys_Id = " . $pk; 
     $xth = $dbh->prepare($sql); 
     $xth->execute(); 
     $cnt_del++; 
    } 
+1

嘗試直接在SQL執行查詢,並給予響應 –

+2

那不是真的*鋪路*一個問題;我們可以看到你的代碼嗎?這根本不應該導致任何問題。問題在於其他地方 –

+0

它成功完成並返回值0 –

回答

2

好吧,這是現在的Perl :)回答

沒有什麼不對您查詢(除了它沒有正確地準備語句並且你正在使用字符串插值)。

在評論,你說,如果此查詢在代碼中直接運行

It completes successfully and returns a value of 0

然後你有一個條件是錯誤的

$cRows = $xth->fetchrow_array() || die "Could not prepare SQL statement:$sql"; 

即使查詢正確執行,但有這意味着0行,它應該顯示你的錯誤信息,這是不正確的。

因此,您只需修復該錯誤消息即可。如果查詢失敗,應該顯示該死亡,而不是當它正確執行但沒有結果。

您可以糾正你的查詢關鍵詞,比如

$sql = "SELECT count(*) FROM member_temp WHERE member_Id = ?"; 
$xth = $dbh->prepare($sql); 
$xth->execute($id) or die("Failed to execute query:". $xth->errstr); 

而且你行檢查可以

if ($xth->rows == 0) 
// No match found 
+0

我明白你的意思,但我仍然收到一個錯誤:DBD :: mysql :: st執行失敗:用1調用綁定變量時0 –

+0

您可能沒有更新查詢根據此代碼 –

+1

如果您啓用['RaiseError'](https://metacpan.org/pod/DBI#RaiseError)你不必檢查每個成功單一方法。 – ThisSuitIsBlackNot