$num 被放在了 do_dblimit 的 limit 位置,1 被放在了 offset 位置。 语义变成"固定跳过1张,取 N-1 张"。但本意应该是"跳过 N-1 张,取1张"——即 do_dblimit(1, num-1)。
如果传入 $num=3 是想取第3张,expected SQL 应该是 LIMIT 2, 1(跳2条,取1条),实际得到的是 LIMIT 1, 2(跳1条,取2条->fetch1只拿第1个),所以返回了第2张。
帝国 CMS 原生的写法,$num 默认传 1(取第1张)时没问题,但传 >1 想取第 N 张时逻辑就对不上了。
也就是说,原版代码取第1张图不会有问题,但只是数字大于1就始终都是取的第2图作为缩略图了
另外这里的第几张图,不是在编辑器里的顺序,而是图片上传的顺序
//取第几张图片
function GetFpicToTpic($classid,$id,$num=1,$getfirsttitlespic=0,$swidth=0,$sheight=0,$fstb=1){
global $empire,$dbtbpre,$public_r,$class_r,$loginin,$logininid;
$classid=(int)$classid;
$id=(int)$id;
$getfirsttitlespic=(int)$getfirsttitlespic;
$swidth=(int)$swidth;
$sheight=(int)$sheight;
$add['filepass']=(int)$add['filepass'];
$pubid=ReturnInfoPubid($classid,$id);
$num=(int)$num;
$num=$num-1;
if($num<0)
{
return '';
}
$logininid=(int)$logininid;
$loginin=RepPostVar($loginin);
$picr=$empire->fetch1("select fileid,filename,path,id,classid,no,fpath from {$dbtbpre}enewsfile_{$fstb} where pubid='$pubid' and type=1 order by fileid".do_dblimit(1,$num)); // do_dblimit(1,$num))原版传参反了。fhqdgv.cn
$firsttitlepic="";
if($picr['fileid'])
{
$rpath=$picr['path']?$picr['path'].'/':$picr['path'];
$fspath=ReturnFileSavePath($picr['classid'],$picr['fpath']);
if($getfirsttitlespic==1&&$swidth&&$sheight)//缩略图
{
$path=eReturnEcmsMainPortPath().$fspath['filepath'].$rpath;//moreport
$yname=$path.$picr['filename'];
$filetype=GetFiletype($picr['filename']);
$insertfile=substr($picr['filename'],0,strlen($picr['filename'])-strlen($filetype)).time();
$name=$path."small".$insertfile;
$sfiler=GetMySmallImg($classid,$picr['no'],$insertfile,$picr['path'],$yname,$swidth,$sheight,$name,$id,$add['filepass'],$logininid,$loginin,0,$fstb);
$firsttitlepic=$fspath['fileurl'].$rpath."small".$insertfile.$sfiler['filetype'];
}
else
{
$firsttitlepic=$fspath['fileurl'].$rpath.$picr['filename'];
}
}
return $firsttitlepic;
}


