1

簡単なクエリだと思ったのですが、うまくいかないようです。すべての助けに感謝します!

テーブル:

関連するテーブルは2つあります: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} \"が必要 ですが、PHPコードの1行にすべての$ q文字列を配置しないと、パーサーインタープリターがトリップする可能性があります。その中の改行文字の上に、そして確かに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 に答える