2012-07-15 100 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