2017-04-11 38 views
2

我一直在寻找两个数据库之间匹配的项目,但是当cronjob运行时,我会得到一个503错误。503通过两个数据库之间的匹配

可变来源是像'彼得'或'玛戈'这样的名字。 而name_key是数组的关键字,如'name'或'event'。

global $dbh; 
global $dbh_second; 

$import_sql = $dbh->prepare('SELECT name_key FROM imports WHERE name = :source'); 
$import_sql->bindParam(':source', $source, PDO::PARAM_STR); 
$import_sql->execute(); 
$name = $import_sql->fetch(PDO::FETCH_ASSOC); 

$source = strtolower($source); 
$import_data_sql = $dbh->prepare('SELECT * FROM import_data WHERE source = :source AND import_key = :key'); 
$import_data_sql->bindParam(':key', $name['name_key'], PDO::PARAM_STR); 
$import_data_sql->bindParam(':source', $source, PDO::PARAM_STR); 
$import_data_sql->execute(); 
$import_data = $import_data_sql->fetchAll(PDO::FETCH_ASSOC); 


foreach ($import_data as $filter) { 

    $column = $filter['import_key']; 
    $party_sql = $dbh_second->prepare("SELECT * FROM `digi_gz_parties` WHERE name LIKE :value"); 
    $party_sql->bindParam(':value', $filter['import_value'], PDO::PARAM_STR); 
    $party_sql->execute(); 

    if($party = $party_sql->fetch(PDO::FETCH_ASSOC)) { 

     $import_check_sql = $dbh->prepare('UPDATE import_data SET status = 1 WHERE source = :source AND import_value LIKE :value AND created_at = :max'); 
     $import_check_sql->bindParam(':max', $filter['max_data'], PDO::PARAM_STR); 
     $import_check_sql->bindParam(':value', $filter['import_value'], PDO::PARAM_STR); 
     $import_check_sql->bindParam(':source', $source, PDO::PARAM_STR); 
     $import_check_sql->execute(); 

    } 

} 

是他们的另一种解决方案,或者我需要设置超时秒数更高?

非常感谢!

+0

什么是您的Web服务器(Apache?)错误日志中的错误消息? – Jocelyn

+0

503秒超时。 –

+0

超时。你应该增加执行时间set_time_limit(0); –

回答

1

您需要批量获取记录,因为否则它需要太长时间并且会超时。并看看一些优化:索引,缓存等。

+0

服务在线。系统需要检查的记录是9000,如果我用1000做它,它将正确地做到没有503错误,但是超过1000的所有数据都会给出503错误。 –

相关问题