[英]Why is my query returning results in column instead of rows?
有一個有效的SQL語句:
my $q_it = $dbh->prepare("SELECT customdata.Field_ID,
customdata.Record_ID,
customdata.StringValue
FROM customdata
WHERE customdata.Field_ID='10012' && (StringValue LIKE '1%' OR StringValue LIKE '2%' OR StringValue LIKE '9%');
");
我為客戶端編寫了一個非常簡單的Perl腳本,以便在其服務器/數據庫上運行。 我無法直接對其進行測試,但是我將代碼傳遞給了他們的DBA:
$q_it->execute();
open (MYFILE, '>>data.txt');
while (my @row=$q_it->fetchrow_array)
{
print MYFILE $row[0].$row[1].$row[2];
}
close (MYFILE);
$ q_it只是普通的SQL Select語句。 我假設data.txt將包含許多記錄(行)。 但是,令人驚訝的是,它在單個列中返回結果,但是卻有許多行,例如:
100012
100012
...
100012
315941
315667
...
315633
2011-06
2011-06
...
2011-06
大約有正確的編號。 “ 100012”,“ 31”值和日期字符串的行數。 理想情況下,應該
100012 315941 2011-06
100012 315667 2011-06
100012 315633 2011-06
難道是我在Perl中做錯了什么,還是因為他們的MySQL數據庫具有不同的結構?
謝謝您的幫助!
我猜您正在查看以前的轉儲數據庫嘗試。 要獲取第一列的所有值,然后獲取第二列的所有值,等等,需要與所顯示的程序完全不同的程序。
不要忘記您正在打開文件append ,這會將所有舊數據保留在文件的開頭。 我本來以為可以進行開放寫操作 ,因為失敗嘗試的輸出幾乎沒有價值。
我還要檢查的狀態open
使用
open MYFILE, '>', 'data.txt' or die $!;
除此之外,除非您將$\\
設置$\\
換行符,否則需要用換行符終止打印輸出以分隔記錄。 寫起來也比較容易
print "@row\n";
而不是明確提及每個字段。
我真的很喜歡使用這樣的東西:
sub fetch_result_rows {
my ($dbh, $sql, @bind_params) = @_;
try {
return $dbh->selectall_arrayref($sql, { RaiseError => 1, Slice => {}, }, @bind_params);
} catch {
confess("Unable to run SQL:\n$sql\nBIND PARAMS: @{[ join(', ', @bind_params) ]}");
}
}
魔術存在於Slice中,這使得返回值以哈希引用的arrayref形式返回。 對我來說,性能開銷是值得的,因為結果如下所示:
[
{ column1 => value, column2 => value, column3 => value }, # row1
{ column1 => value, column2 => value, column3 => value }, # row2
...
]
在perldoc DBI中閱讀以獲取更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.