Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL:查询疑难解答_Php_Mysql - Fatal编程技术网

PHP MySQL:查询疑难解答

PHP MySQL:查询疑难解答,php,mysql,Php,Mysql,我有一个我认为是直截了当的问题,但我似乎无法让它发挥作用。感谢大家的帮助 表格: 涉及两个表:gallery\u meta和prm\u albumgallery_metatbl包含存储在文件结构中的图像数据。prm_相册tbl只是将相册ID与相册常规文本名称对齐。对于这两个TBL,查询中使用的字段名都是正确的 查询: 在下面的代码中,我首先得到一个保存的唱片集名称数组。然后我检查文件结构,看看哪些目录实际上包含图像。此时,我想再次查询数据库,以获得每个作为正片返回的相册的缩略图。就是在这里,这个

我有一个我认为是直截了当的问题,但我似乎无法让它发挥作用。感谢大家的帮助

表格:

涉及两个表:
gallery\u meta
prm\u album
gallery_meta
tbl包含存储在文件结构中的图像数据。
prm_相册
tbl只是将相册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/>';
                }
            }
//从数据库获取相册名称
$albums=array();
$q=“从prm_相册中选择ID、名称,其中1”;
$sql=mysql\u query($q)或die(mysql\u error());
而($r=mysql\u fetch\u数组($sql)){
$album=$r['Name'];
$album_dir=$pattern.$album.'/';
//检查哪些相册实际包含图像(划分为拇指、med和lrg。)
$filecount=count(glob($album_dir.'*'))/3;
//如果找到图像,请将相册放入阵列中
如果($filecount>=1){
$albums[$r['ID']]=$filecount;
}
}
foreach($id=>$filecount的相册){
$q=“选择m.AlbumID、m.FileName、m.FileExt、,
m、 LegacyName,m.IsDefault,
p、 名字
来自图库_meta作为m
左加入prm_相册作为p
在m.AlbumID=p.ID上
其中m.AlbumID=$id
和公共=1
按IsDefault DESC订购
限制为0,1”;
$sql=mysql\u query($q)或die(mysql\u error());
而($r=mysql\u fetch\u数组($sql)){
$album=$r['Name']./';
$legacyname=$r['legacyname'];
$filename=$r['filename'].-sm;
$ext=$r['FileExt'];
回显“.$legacyname.”
; } }
一些点${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";
您应该能够首先在命令行中将其测试到数据库中(这是一点智慧)。

更改

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

您是否已打开
错误报告
显示错误
功能?我在您的代码中看到的唯一输出是
echo',它仅在有行从
$q
查询返回时才会输出。您是否在MySQL客户端中测试了您的查询以验证它是否确实返回了行?@Michael在PHP MyAdmin控制台中尝试了它-工作正常。我真的可以;我看不出有什么问题。如果我删除foreach语句中的查询,页面处理不会有问题。与查询-白色屏幕。即使有
错误报告(E_ALL)!是否确定已设置“显示错误”?带有回显的行错过了$pattern之前的连接点。应该抛出一个意外的错误。@32bitfloat有效!(作为回答)。连接是问题所在。好眼睛:)我对错误报告感到非常困惑-本可以解决很多麻烦。我会进一步研究它。在一行中尝试了所有内容(尽管我在整个站点中有大量的多行查询),但没有成功。还尝试转义
$id
,但也没有任何更改。如上所述,当通过控制台直接传递到db时,查询工作正常。谢谢你!
echo '<img src="'.$pattern.$album.$filename.$ext.'" />'.$legacyname.'<br/>';
ini_set('display_errors', 1);
error_reporting(E_ALL);