0

ディストリビュータのサイトから製品データをダウンロードし、定義した設定に基づいて分類するモジュールを作成しています。カテゴリ マッピングは、次のSQL表に定義されています。

ここに画像の説明を入力

関数はforeach、データをダウンロードするループ内から呼び出されます。上記のデータベースにクエリを実行し、ディストリビューターから受け取った文字列値に基づいてカテゴリを保存する関数を作成する前に、エラーは発生しませんでした。関数を呼び出す行は次のとおりです。

//Get PS category based on mapped values
$PsCategory = getPsCategory($category1);

この関数を呼び出した後、次のエラーが発生し始めました。

Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\prestaprep1-5-3-1\modules\stlimportmodule\model\database.php on line 7

関連する機能は次のとおりです。

function getMappedData(){
include('C:/xampp/htdocs/prestaprep1-5-3-1/modules/stlimportmodule/model/database.php');
$query='SELECT * FROM category_maps';
$statement = $db->prepare($query);
$statement -> execute();
$fetchedData = $statement ->fetchAll();
$statement -> closeCursor();

return $fetchedData;
}

function getPsCategory($stlCategory){
$fetchedData = getMappedData();
//    print_r($fetchedData);
foreach ($fetchedData as $mappedSTLvalues) {

    if($stlCategory == $mappedSTLvalues[0]){
        $psCategoryValue = $mappedSTLvalues['ps_category'];
    }else{
        $psCategoryValue = 2;
    }
}
return $psCategoryValue;
}

お気付きかもしれませんが、これを 2 つの関数に分けています。1 つはコントロールとして、もう 1 つは単にSQLクエリを実行するためです。最初はすべて同じ機能でしたが、トラブルシューティングに役立つように分割しました。私のdbファイルは次のとおりです。

$dsn = 'mysql:host=localhost;dbname=ps_development';
$username = 'root';
$password = '';

try {
    $db = new PDO($dsn, $username, $password);
} catch (PDOException $e) {
    $error_message = $e->getMessage();
    include('database_error.php');
    exit();
}
//DEBUG:    echo "database.php is referenced"

7 行目は次のとおりです。

$db = new PDO($dsn, $username, $password);

私の知る限り、コードのどこかで無限ループに入っているようです。この db ファイルを使用すると、他の関数でエラーが発生することはなく、クエリ構文にエラーが表示されません。データベースには 9 つのレコードしか含まれていないため、大きすぎません。

誰かが私が見逃していることを指摘できれば、私はそれを感謝します.


print_r を実行すると、次の出力が得られます。

 Array ( [0] => Array ( [stl_category] => Christian Living [0] => Christian Living [ps_category] => 38 [1] => 38 [id] => 3 [2] => 3 ) [1] => Array ( [stl_category] => Inspirational Motivation [0] => Inspirational Motivation [ps_category] => 230 [1] => 230 [id] => 4 [2] => 4 ) [2] => Array ( [stl_category] => Love and Marriage [0] => Love and Marriage [ps_category] => 231 [1] => 231 [id] => 5 [2] => 5 ) ) Array ( [0] => Array ( [stl_category] => Christian Living [0] => Christian Living [ps_category] => 38 [1] => 38 [id] => 3 [2] => 3 ) [1] => Array ( [stl_category] => Inspirational Motivation [0] => Inspirational Motivation [ps_category] => 230 [1] => 230 [id] => 4 [2] => 4 ) [2] => Array ( [stl_category] => Love and Marriage [0] => Love and Marriage [ps_category] => 231 [1] => 231 [id] => 5 [2] => 5 ) ) Array ( [0] => Array ( [stl_category] => Christian Living [0] => Christian Living [ps_category] => 38 [1] => 38 [id] => 3 [2] => 3 ) [1] => Array ( [stl_category] => Inspirational Motivation [0] => Inspirational Motivation [ps_category] => 230 [1] => 230 [id] => 4 [2] => 4 ) [2] => Array ( [stl_category] => Love and Marriage [0] => Love and Marriage [ps_category] => 231 [1] => 231 [id] => 5 [2] => 5 ) ) Array ( [0] => Array ( [stl_category] => Christian Living [0] => Christian Living [ps_category] => 38 [1] => 38 [id] => 3 [2] => 3 ) [1] => Array ( [stl_category] => Inspirational Motivation [0] => Inspirational Motivation [ps_category] => 230 [1] => 230 [id] => 4 [2] => 4 ) [2] => Array ( [stl_category] => Love and Marriage [0] => Love and Marriage [ps_category] => 231 [1] => 231 [id] => 5 [2] => 5 ) ) Array ( [0] => Array ( [stl_category] => Christian Living [0] => Christian Living [ps_category] => 38 [1] => 38 [id] => 3 [2] => 3 ) [1] => Array ( [stl_category] => Inspirational Motivation [0] => Inspirational Motivation [ps_category] => 230 [1] => 230 [id] => 4 [2] => 4 ) [2] => Array ( [stl_category] => Love and Marriage [0] => Love and Marriage [ps_category] => 231 [1] => 231 [id] => 5 [2] => 5 ) ) Array ( [0] => Array ( [stl_category] => Christian Living [0] => Christian Living [ps_category] => 38 [1] => 38 [id] => 3 [2] => 3 ) [1] => Array ( [stl_category] => Inspirational Motivation [0] => Inspirational Motivation [ps_category] => 230 [1] => 230 [id] => 4 [2] => 4 ) [2] => Array ( [stl_category] => Love and Marriage [0] => Love and Marriage [ps_category] => 231 [1] => 231 [id] => 5 [2] => 5 ) ) 
4

1 に答える 1

1

データベースへの接続に時間がかかりすぎているようです。これは以前に機能しましたか?

スクリプトを実行できる時間を延長するには、次のことを試してください。

ini_set('max_execution_time', 600); //600 seconds = 10 minutes

ただし、接続に時間がかかりすぎているようです。ODBC を使用していますね。

アップデート:

私はあなたが含まれているのを見ます

include('C:/xampp/htdocs/prestaprep1-5-3-1/modules/stlimportmodule/model/database.php'); 

関数内。これは、for ループがある場合、多数の $db オブジェクトを作成してフリーズを引き起こす可能性があることを意味します。インクルードを関数の外に移動し、グローバル $db 変数を使用する必要があります。

于 2013-04-19T18:32:04.120 に答える