PHP if和while语句不能正常工作

时间:2014-04-08 14:29:00

标签: php mysql sql oracle if-statement

我有两个查询的PHP代码。一个是在Oracle数据库中,结果是大约100行数据(在数据中有SKU编号)。另一个是在一个mysql数据库中,有大约30行数据(数据也有SKU编号)。

我需要逐行比较第一个查询中的每个SKU和第二个查询。如果第一个查询中的SKU也出现在第二个查询中,那么我需要它来回显SKU。

第二个查询中的所有SKU都在第一个查询中,因此我希望结果能够回显所有30个SKU,但事实并非如此。根据我如何更改语法,它会回显17行,100行或根本没有行。

值得注意的是,两个查询都运行良好。 Oracle查询非常长,并且其中包含大量子查询,因此我不会在下面包含该完整查询。 Oracle查询在SQL Developer中完美地返回结果,MySQL查询在HeidiSQL中完美地返回结果。两个查询都经过测试并在其他php文件中作为表格回显,以确保它们正常工作。

以下是我试图修复的php文件到目前为止的内容;

<?php

$conn = oci_connect($user, $pswd, $hst);
$sql = oci_parse($conn,"[Really long Oracle Query]");

while ($row = oci_fetch_assoc($sql))
{
    $sku = $row['SKU'];
    $con = mysql_connect("[database host]", "[database user]", "[database password]");
    mysql_select_db("[database_name]");
    $sqls = "SELECT * FROM [table_name] WHERE [this_date_column] BETWEEN 
        DATE_SUB(NOW(), INTERVAL 14 DAY) AND NOW()";
    $result = mysql_query($sqls);
    $mailer = NULL;

    while($rows = mysql_fetch_assoc($result))
    {
        $m_sku = $rows['sku'];
        if ($m_sku == $sku)
        {
            $mailer == 'false';
        }   
    }
    if ($mailer == 'false')
    {
        echo $m_sku;
        echo "<br>";
    }       
}

?>

再次; MySQL查询中只有30个SKU,但Oracle查询中有超过100个SKU。 MySQL查询中的所有SKU肯定都在Oracle查询中。

任何人都能看到我做错了什么?

提前致谢,

- 安东尼

2 个答案:

答案 0 :(得分:1)

您有基本的sintacsis错误:
=用于分配值
==比较了2个变量(不是类型*) ===比较了2个变量,包括类型。

您的代码应如下所示:

while($rows = mysql_fetch_assoc($result))
    {
        $m_sku = $rows['sku'];
        if ($m_sku == $sku)
        {
            $mailer = false; // == is for comparison, = is for assign
        }   
    }
    if ($mailer === false)
    {
        echo $m_sku;
        echo "<br>";
    }   

if($member == 'false'){...}

当&#39; false&#39;将== falsefull 值进行比较(0,null,false,array(),&#39;&#39;)..它不会被加工,因为它是解析为&#34;非空字符串&#34;所以它不是 falsefull

答案 1 :(得分:0)

这是你的代码,MySQL连接移出循环并且==赋值已修复。

<?php

//Connect to databases
$oracle = oci_connect($user, $pswd, $hst);
$mysql = mysql_connect("[database host]", "[database user]", "[database password]");
mysql_select_db("[database_name]");

//Get rows from Oracle
$oracle_result = oci_parse($oracle, "[Really long Oracle Query]");
$oracle_rows = array();
while ($row = oci_fetch_assoc($oracle_result)) $oracle_rows[] = $row;

//Get rows from MySQL
$mysql_sql = "SELECT * FROM [database_name] WHERE this_date_column BETWEEN 
    DATE_SUB(NOW(), INTERVAL 14 DAY) AND NOW()";
$mysql_result = mysql_query($mysql_sql);
$mysql_rows = array();
while ($row = mysql_fetch_assoc($mysql_result)) $mysql_rows[] = $row;

foreach ($oracle_rows as $oracle_row) {
    $oracle_sku = $oracle_row['SKU']; 
    foreach ($mysql_rows as $mysql_row) {
        $mysql_sku = $mysql_row['sku'];
        $mailer = null;
        if ($mysql_sku == $oracle_sku) {
            $mailer = false;
            echo $mysql_sku . "<br>";
        }   
    }
}
相关问题