2013-02-25 2 views
2

내 앨범을 표시하기 위해 perl을 기반으로 cgi를 만들려고하고 있습니다. 이제 사진 정렬 기능을 사용하고 있습니다. 나는 mysql에 각 사진의 정보를 저장했다. 모든 사진을 표시하려면 먼저 정보를 가져와야합니다.mysql 데이터베이스에서 정렬 된 데이터를 perl로 가져올 수 없습니다.

다음과 같은 문제가 있습니다. mysql에서 가져온 데이터가 각 사진의 파일 크기로 정렬되기를 기대하지만, fetchrow_array()의 결과는 mysql에 삽입되는 시간에 따른 데이터 정렬입니다.

는 MySQL의 쉘에서, 나는

파일 크기별로 정렬 예상 결과를 제공
SELECT * FROM album ORDER BY filesize; 

을 테스트했다. 다음은 내 소스 코드의 일부입니다.

#!/usr/bin/perl -w 
use strict; 
use CGI; 

my $sort = 'filesize'; 

# Connect the database 
my $dbh = do 'db.pl'; 

# Prepare to print out the pictures 
my $query; 
$query = $dbh->prepare("SELECT * FROM album ORDER BY ?") or die $DBI::errstr; 
$query->execute($sort) or die $DBI::errstr; 

# Print out all pictures 
while(my @data = $query->fetchrow_array()){ 
    # Process fetched data 
    (my $id, my $user, my $filepath, my $filename, my $filesize, my $uploadtime, my $description, my $tfilepath, my $sessioninfo) = @data; 
    print '<fieldset>'; 

    # Display thumbnail 
    print '<a href="', $filepath, '"><img src="', $tfilepath, '" title="', $description, '"></a>'; 

    # Display filename 
    print '</br>'; 

    print $filename; 
    print '</fieldset>';  
} 

# Finish printing out all fetched pictures 
$query->finish; 

잘못된 명령을 사용하고 있습니까? 또는 정렬 함수를 수행하는 데 잘못된 방법을 사용하고 있습니까? 도움 주셔서 감사합니다!

+2

IFAIK 자리 값만을 사용할 수있다 같이 쓸 수있다. – Toto

답변

3

ORDER BY은 표현식이 아니라 필드 이름을 사용합니다. 그런데


my $query = "SELECT * FROM album ORDER BY ".$dbh->quote_identifier($sort); 
my $sth = $dbh->prepare($query); 
$sth->execute(); 

, 당신은 너무 출력측에 버그가 있습니다. $description에 " "", " &"또는 " <"이 포함되면 어떻게 될까요? 탈출이 필요해. 그런데

sub text_to_html { 
    my ($s) = @_; 
    $s =~ s/&/&amp;/g; 
    $s =~ s/</&lt;/g; 
    $s =~ s/>/&gt;/g; 
    $s =~ s/"/&quot;/g; 
    $s =~ s/'/&apos;/g; 
    return $s; 
} 
,

(my $id, my $user, my $filepath, my $filename, 
my $filesize, my $uploadtime, my $description, 
my $tfilepath, my $sessioninfo) = @data; 

my ($id, $user, $filepath, $filename, 
    $filesize, $uploadtime, $description, 
    $tfilepath, $sessioninfo) = @data; 
+0

작품, 고마워요! 그런데 탈출을 위해 CGI-> escapeHTML ($ description)을 사용하지 않는 이유는 무엇입니까? – SSheldon

관련 문제