2012-07-15 95 views
1

我有我认为是一个简单的查询,但我似乎无法让它工作。所有帮助赞赏!PHP MySQL:疑难解答查询

的表:

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

查询:

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

我所得到的只是一个白屏,没有任何错误报告。数组$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/>'; 
       } 
      } 
+0

您有'error_reporting'打开并且'display_errors'打开了吗?我在你的代码中看到的唯一输出是'echo' 2012-07-15 22:54:36

+0

您是否在MySQL客户端中测试了您的查询以确认它确实返回了一行? – 2012-07-15 22:56:37

+0

@Michael在PHP MyAdmin控制台尝试它 - 工作正常。我真的不能看到它有什么问题。如果我在foreach语句中删除查询,则页面处理没有问题。随着查询 - 白色屏幕。即使有'error_reporting(E_ALL);'! – Eamonn 2012-07-15 23:05:23

回答

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

你应该能够测试在命令行上到数据库第一太(智慧位)。

+0

尝试所有在一行(尽管我有整个网站的多行查询负载)没有运气。也尝试逃避'$ id',但没有改变那里。如上所述,当通过控制台直接传递给数据库时,查询工作正常。虽然谢谢! – Eamonn 2012-07-15 23:15:50