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);