簡體   English   中英

為什么用PHP執行SQL查詢時會收到超時錯誤?

[英]Why am I receiving a time out error while performing a SQL query with PHP?

我正在編寫一個模塊,該模塊從我們的分銷商的站點下載產品數據,然后根據我定義的設置將其分類。 類別映射在以下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;
}

您可能會注意到,我將其分為兩個函數,一個作為控件,另一個僅用於執行SQL查詢。 最初,它們全都具有相同的功能,但我對其進行了划分,以幫助進行故障排除。 我的數據庫文件如下:

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

據我所知,似乎我在代碼中的某個地方進入了無限循環。 使用此數據庫文件時,沒有其他函數有任何錯誤,並且我的查詢語法中看不到任何錯誤。 該數據庫不是太大,因為它僅包含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 ) ) 

似乎連接到數據庫花費的時間太長。 這以前有用嗎?

您可以嘗試以下方法來延長腳本可以運行的時間:

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對象並導致凍結。 您需要將include移出函數,並使用全局$ db變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM