当ODBC在同一个脚本中时,MySQL无法正常工作

时间:2011-08-01 16:16:31

标签: php mysql odbc

我工作的公司有一个Progress DB,可存储大部分信息。他们让我制作一个PHP脚本,可以从中提取数据并将其与MySQL数据库中的数据合并。

起初我认为我只会获取数据,但过了一段时间后我发现Progress DB非常慢。我决定从MySQL或Progress获取页面,具体取决于它(MySQL胜过Progress)

我遇到了一个问题,但由于某些原因,ODBC和MySQL似乎无法在打开时运行。我怎么解决这个问题?是否有可能做我需要做的事情?

注意:我在整个地方抛出了错误,MySQL从未返回错误。 ODBC始终返回并返回内容,但它永远不会将其插入MySQL数据库

这是我的代码:

$job_num = "59505";
$fields = 'JobNum, Name, City, State, StartDate, ReqDueDate';
$field_queries = 'j.JobNum AS JobNum, Name, City, State, jh.StartDate AS StartDate, ReqDueDate';

//Determine if there is a record in the MySQL DB that has the job
$mysqlr = mysql_query("SELECT * FROM jobsinfo WHERE JobNum='$job_num'");
if(!$mysqlr){
    die(mysql_error());
}
//If there is a record, display it from there: faster
if(mysql_num_rows($mysqlr) > 0){
    //Take the fields and explode them into an array so that it can be looped through.
    $field_array = explode(', ', $fields);
    //Return each row from the database
    while($row = mysql_fetch_array($mysqlr)){
        //Return all fields in the array
        foreach($field_array as $key=>$field){
            echo $field .": ".$row[$field]."<br>";
        }
        //Because the Description comes from a different part of the Progress include it here.
        echo "Description:<br>".$row['Description'];
    }
}else{
    //If there is no record in the MySQL display it from the Progress AND copy it over.
    //Begin by inserting a record to later be modified
    mysql_query("INSERT INTO jobsinfo (JobNum) VALUES ('$job_num')") or die(mysql_error());
        $id = mysql_insert_id();
    //Connect to the Progress DB
    $conodbc = odbc_connect($dsn, $username, $password, SQL_CUR_USE_ODBC);
    //Explode the fields so that they can be looped through.
    $field_array = explode(', ', $fields);
    //Make the query to the Progress DB. Merge many tables into one query using JOINs
    $sql = "SELECT TOP 1 ".$field_queries." FROM PUB.JobProd j LEFT JOIN PUB.BookOrd b ON j.OrderNum=b.OrderNum LEFT JOIN PUB.Customer c ON b.CustNum=c.CustNum LEFT JOIN PUB.JobHead jh ON j.JobNum=jh.JobNum WHERE j.JobNum = '$job_num' ORDER BY ReqDueDate DESC";
        //Execute the query
        $rs = odbc_exec($conodbc,$sql) or die('Select failed!');
            //For each record loop through
            while(odbc_fetch_row($rs)){
                //For each field display
                foreach($field_array as $key=>$field){
                    $value = odbc_result($rs, $field);
                    echo $field.": ".$value."<br>";
                    //Update the previously inserted row with the correct information
                    mysql_query("UPDATE jobsinfo SET ".$field."='$value' WHERE id = '$id'");
                }
            }
    //Because there are multiple job parts it is easiest to just loop through it seperately and not JOIN it
    $sql_asmbl = "SELECT * FROM PUB.JobAsmbl AS ja WHERE JobNum = '$job_num'";
        //Execture
        $rs_asmbl = odbc_exec($conodbc,$sql_asmbl) or die('Select failed!');
        echo 'Description:<br>';
            $ptdesc ='';
            //Loop through all the rows that match the job number
            while(odbc_fetch_row($rs_asmbl)){
                $ptdesc .= odbc_result($rs_asmbl, 'PartNum') ." - ";
                $ptdesc .= odbc_result($rs_asmbl, 'Description') ."<br>";
            }
            $ptdesc = mysql_real_escape_string($ptdesc);
            //Update the MySQL
            mysql_query("UPDATE jobsinfo SET Description = '$ptdesc' WHERE id = '$id'");
            //Display it
            echo $ptdesc;
    //Close DB's
    odbc_close($conodbc);
    mysql_close($conn);
}

3 个答案:

答案 0 :(得分:3)

您假设MySQL查询始终成功运行:

$mysql = mysql_query("SELECT * FROM jobsinfo WHERE JobNum='$job_num'");

if(mysql_num_rows($mysql) > 0){
}

您应该始终明确地测试它:

$mysql = mysql_query("SELECT * FROM jobsinfo WHERE JobNum='$job_num'")
if( !$mysql ){
    die(mysql_error());
}

答案 1 :(得分:1)

我看到你建立了一个ODBC连接,但我没有看到使用mysqli或PDO的mysql_connect()或类似东西。你实际上是在打开与mysql的套接字连接吗?你刚刚离开了这个代码示例,或者你忘了在你的代码中建立连接?

答案 2 :(得分:0)

我将INSERT向上移了一下并删除了'from('JobNum'),现在它工作正常。

找到错误原因。 MySQL和ODBC都使用$ conn作为连接变量。这导致错误。