Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较MSSQL的结果集和MYSQL的结果集,在MSSQL结果集中找到新添加的行,并在PHP中插入MYSQL?_Php_Mysql_Sql Server_Pdo_Foreach - Fatal编程技术网

如何比较MSSQL的结果集和MYSQL的结果集,在MSSQL结果集中找到新添加的行,并在PHP中插入MYSQL?

如何比较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');

以下脚本的主要目的是将数据从MSSQL表(PanleList)插入MYSQL表。这在Linux服务器上每5分钟运行一次

尽管MSSQL表有一个或多个新条目,但它只将MSSQL中的第一行插入MYSQL表(面板)

我不明白为什么它只添加了MSSQL中的第一个新行。有人能帮我吗?我相信问题在于嵌套的foreach循环

<?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感谢您的回复,我只是尝试省略
中断
,但仍然是一样的。