1

PHP/MYSQLについて質問があります。MYSQLテーブルの色のリストを取得し、それらを多数のHTMLテーブルにレンダリングする関数があります。アイデアは、顧客が特定のオプションを選択しない限り、ほとんどが非表示になるというものです。ユーザーがマウスを色の上に置くと、より詳細な画像が読み込まれます。正常に動作しますが、特定の数の文字が実行されるとスクリプトの実行が停止します。コードは次のとおりです。

リクエスト:

$sql = 'SELECT *, GROUP_CONCAT(description ORDER BY i.model_correspondance ASC) AS concat,     GROUP_CONCAT(model_correspondance ORDER BY i.model_correspondance ASC) AS modell, GROUP_CONCAT(element) AS elem, GROUP_CONCAT(coordinates ORDER BY i.model_correspondance ASC) AS coord FROM design_tool_items AS i WHERE i.model='.$shoe.' GROUP BY i.element, i.category, i.subelement ORDER BY i.id ASC';

そして残りのPHP:

        if ($results = Db::getInstance()->ExecuteS($sql)) {
            foreach ($results as $row) {

                if($row['subelement']=='') {
                    if(isset($i)) $code .= '</div>';
                        $code .= '<div class="'.$display.' color_holder" rel="'.$row['style'].'" id="div'.$row['subelement'].'.'.$row['element'].'">';
                        $i=1;
                } else {
                    $code .= '</div>';
                    $code .= '<div class="no color_holder" rel="'.$row['style'].'" id="div'.$row['subelement'].'.'.$row['element'].'">';
                }

                $sentinel = $row['element'];
                $code .= '<div style="text-align:left;padding:10px">'.$row['category'].'</div>';
                $concat = explode(',', $row['concat']);
                $coordinate = explode(',', $row['coord']);
                $model_corres = explode(',', $row['modell']);

                foreach($concat as $item => $corres) {

                    if(($i==1)&&(array_search($sentinel, $array_elements)===false)) { 
                        $array_elements[] = $sentinel;
                        $select = 'selected';
                    } else $select = '';

                    $coord = explode('#', $coordinate[$item]);

                    $clean_array = array($row['category'], $corres);
                    foreach($clean_array as &$text) {
                        $text = str_replace(' ', '_', $text);
                        $text = strtolower($text);  
                    }

                    $code .= '<div style="width:60px;padding-left:10px;margin:auto;float:left;">';
                    $code .= '<div onmouseover="Tip(\'<div><img style=width:200px;height:200px; src='.$val.'folded_images/'.$clean_array[0].'/'.$clean_array[1].'.jpg alt=Image:'.$corres.' /><br>'.$corres.'</div>\')" onmouseout="UnTip()" rel="'.$row['style'].'" denom="'.$row['subelement'].'.'.$sentinel.$model_corres[$item].'" class="color '.$select.'" style="background-position:'.$coord[0].'px '.$coord[1].'px;"></div>';
                    $code .= '</div>';
                    if(is_int($i/3)) $code .= '<div style="clear:both;"></div>';
                    $i++;
                }
                $code .= '<div style="clear:both;"></div>';
            }
        }

        return $code;

100行目で、スクリプトは途中で機能を停止し、説明の最初の3文字のみを表示します。前の説明の長さを短くすると、さらに機能するため、問題は配列$concatから発生します。

サイズ制限があると思いますか(以前はPHP 5.2と8Mbの128Mbについて知っていましたが、WebサイトはPHP 5.2.3を実行しており、128Mbからはほど遠いと思います)?

長い話題でごめんなさい、これに注目してくださる皆様、よろしくお願いします。

良い一日を過ごしてください!

4

2 に答える 2

1

その使用のためGROUP_CONCAT

役に立つかもしれない役に立つリンク。リンク

于 2013-03-22T02:48:21.427 に答える
0

最大実行時間および/またはメモリ制限に関連している可能性があります。それぞれを別々に(そして、疑わしい場合は一緒に)微調整して、好ましい結果が得られるかどうかを確認する価値があります。PHPのより良いデバッグログを有効にすることもできます。

于 2013-03-22T02:48:48.380 に答える