mysql_num_行到php数据对象

mysql_num_行到php数据对象,php,mysql,pdo,Php,Mysql,Pdo,在将代码从mysql*转换为php数据对象时,我感到困惑。我有一本相册,里面有一张照片,我希望该相册的第一张照片是该相册的封面图像。我知道如何在sql中实现这一点,但我现在遇到了pdo的问题。这是我的密码: $sqlAlb="Select album_id,album_name from albums"; $resAlb=$db->prepare($sqlAlb); $resAlb->execute(); $strAlb

在将代码从mysql*转换为php数据对象时,我感到困惑。我有一本相册,里面有一张照片,我希望该相册的第一张照片是该相册的封面图像。我知道如何在sql中实现这一点,但我现在遇到了pdo的问题。这是我的密码:

        $sqlAlb="Select album_id,album_name from albums";
        $resAlb=$db->prepare($sqlAlb);
        $resAlb->execute();
        $strAlb="";
            while($rowAlb = $resAlb->fetch(PDO::FETCH_ASSOC)){
            $rs=$db->prepare("select COUNT(*) from gallery where album_id=".$rowAlb['album_id']);
            $rs->execute();
            $num_rows=$rs->fetchColumn();
            $dset=$rs->fetch(PDO::FETCH_ASSOC);
            if($rs!=0){
            $strAlb.="<article class='one-third column' data-categories='sermons people'>";
            $strAlb.="<div class='project-thumb'><div class='bordered'>";
            $strAlb.="<figure class='add-border'>";
            $strAlb.="<a class='single-image picture-icon' rel='gallery' ><img src='uploads/photos/".$dset['pic_img']."' alt='' /></a>";
            $strAlb.="</figure>";
            $strAlb.="</div></div></article>";
            }
            }
                echo $strAlb;

您没有具体说明遇到了什么问题,但我猜您只是没有从查询中获得所需的数据。似乎您正在查询一个计数值,然后尝试将该值用作图像href属性的一部分,除非您的图像以非常特定的方式编号,否则该属性可能无法工作

就我个人而言,我会在您的图库中添加一个特定的tintyint布尔型字段,以明确指示哪幅图像是封面图像,而不是依赖于某种排序顺序,这可能无法根据您查询表的方式保证。然后,我将利用一个查询连接相册和图库表,以获取您所需的信息,如下所示:

SELECT a.album_id, a.album_name, g.image_filename  <-- or whatever your filename field is
FROM albums AS a
INNER JOIN gallery AS g ON a.album_id = g.album.id
WHERE g.is_cover = 1

然后,您可以在单个查询中获得所需的所有数据,而不是1+个相册查询。然后,您将遍历结果集以获取所需的数据。

因为您使用的是PDO,这非常好,所以绝对要确保对所有用户数据都使用PDO$rowAlb['album_id']不应直接出现在查询字符串中。您遇到了什么问题?不要在循环中执行单独的查询,将这两个查询与联接结合起来:选择a.album_id album_id、album_名称、count*ct from albums a联接库使用album_id按album_id、album_名称分组。