如何比较MSSQL的结果集和MYSQL的结果集,在MSSQL结果集中找到新添加的行,并在PHP中插入MYSQL?
以下脚本的主要目的是将数据从MSSQL表(PanleList)插入MYSQL表。这在Linux服务器上每5分钟运行一次 尽管MSSQL表有一个或多个新条目,但它只将MSSQL中的第一行插入MYSQL表(面板) 我不明白为什么它只添加了MSSQL中的第一个新行。有人能帮我吗?我相信问题在于嵌套的foreach循环如何比较MSSQL的结果集和MYSQL的结果集,在MSSQL结果集中找到新添加的行,并在PHP中插入MYSQL?,php,mysql,sql-server,pdo,foreach,Php,Mysql,Sql Server,Pdo,Foreach,以下脚本的主要目的是将数据从MSSQL表(PanleList)插入MYSQL表。这在Linux服务器上每5分钟运行一次 尽管MSSQL表有一个或多个新条目,但它只将MSSQL中的第一行插入MYSQL表(面板) 我不明白为什么它只添加了MSSQL中的第一个新行。有人能帮我吗?我相信问题在于嵌套的foreach循环 <?php //Import the connection include('/var/www/html/dbConnect_query_sql.php');
<?php
//Import the connection
include('/var/www/html/dbConnect_query_sql.php');
include('/var/www/html/dbConnect_query_mysql.php');
$mysql_projects_list = 3751, 3875, 3975, 3390;
//Get the result from MSSQL
$stm_mssql = $conn->prepare("SELECT P.PanelMark as Panel_Number FROM (SELECT * FROM PanelList WHERE JobNo IN ($mysql_projects_list)) P ORDER BY SSMA_TimeStamp DESC");
$stm_mssql->execute();
$result_mssql = $stm_mssql->setFetchMode(PDO::FETCH_ASSOC);
$resul_panels_mssql = $stm_mssql->fetchAll();
//Get the result set from MYSQL
$panel_list_mysql = $conn_mysql->prepare("SELECT PANEL_NUMBER as Panel_Number FROM PANELS ORDER BY CURRENT_DATE_TIME DESC");
$panel_list_mysql->execute();
$result_panel_list_mysql = $panel_list_mysql->setFetchMode(PDO::FETCH_ASSOC);
$result_panels_mysql = $panel_list_mysql->fetchAll();
//declare variable for error checking purposes
$val = 0;
$val2 = 0;
$val3 = 0;
$panel ='';
//Compare the two result sets
foreach ($stm_mssql->fetchAll() as $i => $j) {
foreach ($panel_list_mysql->fetchAll() as $k => $z) {
//find the newly added panel
if($j['Panel_Number'] != $z['Panel_Number']){
$val2++;
//Create a list of panles to send in to IN Operator
$mysql_new_panels[] = htmlspecialchars("'".$j['Panel_Number']."'" , ENT_NOQUOTES, 'UTF-8');
break;
}
else{
$val++;
break;
}
}
}
if(!empty($mysql_new_panels)){
//===================================4. Get the new panel details from MSSQL and insert into the MYSQL=====================================
$mysql_new_panel_list = implode(',', $mysql_new_panels);
$stm_mssql = $conn->prepare("SELECT JobNo, PanelLevel ,PanelPrefix, PanelType, PanelMark as Panel_Number, ExtRef as ExtRef, SubJobNo as Sub_Job_Number, 'Status' , [SimilarTo], [Revision], [IssueForApp], [IssueForMan], [FactoryDate], [LevelCurrent] FROM PanelList WHERE PanelMark IN($mysql_new_panel_list)");
$stm_mssql->execute();
$result_mssql = $stm_mssql->setFetchMode(PDO::FETCH_ASSOC);
foreach ($stm_mssql->fetchAll() as $a => $b) {
//Getting the Project ID from MYSQL
$mysql_project_id = $conn_mysql->prepare("SELECT PROJECT_ID, PROJECT_NUMBER, PROJECT_NAME FROM PROJECTS WHERE PROJECT_NUMBER=".$b['JobNo']);
$mysql_project_id->execute();
$result_mssql = $mysql_project_id->setFetchMode(PDO::FETCH_ASSOC);
$pro_id_arr = $mysql_project_id->fetchAll();
$pro_id = $pro_id_arr[0]['PROJECT_ID'];
//Getting Sub Project ID from MYSQL
$mysql_subproject_id = $conn_mysql->prepare("SELECT ID AS SUB_PROJECT_ID FROM SUB_PROJECTS WHERE PROJECT_ID = $pro_id AND SUB_JOB_NUMBER =".$b['Sub_Job_Number']);
$mysql_subproject_id->execute();
$mysql_subproject_id->setFetchMode(PDO::FETCH_ASSOC);
$sub_id_arr = $mysql_subproject_id->fetchAll();
$sub_id = $sub_id_arr[0]['SUB_PROJECT_ID'];
//Check for duplicates before entering
$duplicate_panel_num = $conn_mysql->prepare("SELECT PANEL_NUMBER FROM PANELS WHERE PANEL_NUMBER='".$b['Panel_Number']."'");
$duplicate_panel_num->execute();
$duplicate_panel_num->setFetchMode(PDO::FETCH_ASSOC);
$panel_num_arr = $duplicate_panel_num->fetchAll();
//Check for the duplicate panel
if(!$duplicate_panel_num->fetchAll()){
try{
$conn_mysql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Insert in to the MYSQL PANELS table
$panel_insert = $conn_mysql->prepare("INSERT INTO PANELS (PANEL_NUMBER, PANEL_LEVEL, PREFIX, TYPE, PID, SID, SIMILAR_TO, REVISION, EXTERNAL_REFERENCE, IFA_DATE, IFM_DATE, FACTORY_DATE, SUB_JOB_NO) VALUES('".$b['Panel_Number']."', ".$b['PanelLevel'].", "."'".$b['PanelPrefix']."', '".$b['PanelType']."', ".$pro_id.", ".$sub_id.", '".$b['SimilarTo']."', '".$b['Revision']."', '".$b['ExtRef']."', '".$b['IssueForApp']."', '".$b['IssueForMan']."', '".$b['FactoryDate']."', ".$b['Sub_Job_Number'].")" );
$panel_insert->execute();
break;
}
catch(PDOException $e){
echo $sql . "<br> Error:" . $e->getMessage();
break;
}
}
else{
break;
}
}
$conn = null;
$conn_mysql = null;
echo "<br>COMES HERE OUT OF THE LOOP";
}
else{
echo "<br>EMPTY ELSE ALL DATA EQUALS";
break;
}
echo"<br>LASTLY COMES HERE";
exit("<br>EXIT<br>EQUALS FOUND CONDITION: ". $val. "<br>NOT EQUAL FOUND".$val2."<br>MSSQL LOOP:".$val3);
?>
,因为在插入一次之后,就中断了。不会处理其他行。@SamiKuhmonen感谢您的回复,我只是尝试省略中断
,但仍然是一样的。