首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过perl从mysql数据库获取排序数据

问无法通过perl从mysql数据库获取排序数据
EN

Stack Overflow用户
提问于 2013-02-25 17:57:52
回答 1查看 239关注 0票数 2

我正在尝试创建一个基于perl的cgi来显示我的相册,现在我正在研究照片的排序功能。我将每张照片的信息存储在mysql中。要显示所有照片,我必须先获取信息。

这就是问题:我期望从mysql获取的数据是按照每张照片的文件大小排序的,但是fetchrow_array()的结果是根据插入到mysql中的时间对数据进行排序。

在mysql shell中,我测试了

代码语言:javascript
复制
SELECT * FROM album ORDER BY filesize;

它给出了按文件大小排序的预期结果。以下是我的部分源代码:

代码语言:javascript
复制
#!/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;

我是不是用错了命令?或者我使用了一种错误的方法来执行排序功能?感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-25 18:02:19

ORDER BY接受字段名,而不是表达式。

代码语言:javascript
复制
my $query = "SELECT * FROM album ORDER BY ".$dbh->quote_identifier($sort);
my $sth = $dbh->prepare($query);
$sth->execute();

顺便说一句,你在输出端也有bug。如果$description包含""“、"&”或"<“怎么办?你需要一些逃脱。

代码语言:javascript
复制
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;
}

顺便说一下,

代码语言:javascript
复制
(my $id, my $user, my $filepath, my $filename,
 my $filesize, my $uploadtime, my $description,
 my $tfilepath, my $sessioninfo) = @data;

可以写成

代码语言:javascript
复制
my ($id, $user, $filepath, $filename,
    $filesize, $uploadtime, $description,
    $tfilepath, $sessioninfo) = @data;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15064301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档