1

我有一个我认为是直截了当的查询,但我似乎无法让它工作。所有帮助表示赞赏!

表格:

涉及两个表:gallery_metaprm_albumThe gallery_metatbl 包含存储在文件结构中的图像数据。tbl 只是将prm_album专辑 ID 与专辑常规文本名称对齐。对于这两个 tbl,查询中使用的字段名称都是正确的。

查询:

在下面的代码中,我首先得到一组保存的专辑名称。然后我检查文件结构以查看哪些目录实际包含图像。此时,我想再次查询数据库以获取每个作为正数返回的专辑的缩略图。正是在这里,该过程失败了。

我得到的只是一个白屏,没有任何错误报告。数组$albums已成功填充,$id变量正在传递给$q查询。$pattern只是存储专辑目录的父目录的文件路径。

            //Get album names from db
            $albums = array(); 
            $q="SELECT ID, Name FROM prm_album WHERE 1";
            $sql=mysql_query($q) or die(mysql_error());
            while($r=mysql_fetch_array($sql)) {
                $album = $r['Name'];
                $album_dir = $pattern.$album.'/';

                //check which albums actually contain images (dividing to account for thumbs, med, lrg.)
                $filecount = count(glob($album_dir.'*'))/3;

                //if images found, put album in array
                if($filecount >= 1) {
                    $albums[ $r['ID'] ] = $filecount;
                }
            }

            foreach($albums as $id => $filecount) {     
                $q="SELECT m.AlbumID, m.FileName, m.FileExt,
                        m.LegacyName, m.IsDefault,
                        p.Name
                        FROM gallery_meta AS m
                            LEFT JOIN prm_album AS p
                                ON m.AlbumID = p.ID

                        WHERE m.AlbumID = $id
                            AND Public = 1
                            ORDER BY IsDefault DESC
                            LIMIT 0,1";

                $sql=mysql_query($q) or die(mysql_error());
                while($r=mysql_fetch_array($sql)) {
                    $album=$r['Name'].'/';
                    $legacyname=$r['LegacyName'];
                    $filename=$r['FileName'].'-sm.';
                    $ext=$r['FileExt'];

                    echo '<img src="'$pattern.$album.$filename.$ext.'" />'.$legacyname.'<br/>';
                }
            }
4

2 回答 2

0

几个点 ${id} 可以这样写在一个字符串中,可能需要 \"${id}\" 但更有可能 将所有 $q 字符串放在 PHP 代码的一行中,否则解析器解释器可能会出错在其中的换行符上,当然 sql 会。

$q="SELECT m.AlbumID, m.FileName, m.FileExt, m.LegacyName, m.IsDefault, p.Name FROM gallery_meta AS m LEFT JOIN prm_album AS p ON m.AlbumID = p.ID WHERE m.AlbumID = $id AND Public = 1 ORDER BY IsDefault DESC LIMIT 0,1";

您应该也可以先在命令行中将其测试到数据库中(有点智慧)。

于 2012-07-15T23:08:40.870 回答
0

改变

echo '<img src="'$pattern.$album.$filename.$ext.'" />'.$legacyname.'<br/>';

echo '<img src="'.$pattern.$album.$filename.$ext.'" />'.$legacyname.'<br/>';

第一个点不见了。并始终将这些行设置在您的脚本之上 =)

ini_set('display_errors', 1);
error_reporting(E_ALL);
于 2012-07-15T23:21:05.523 回答