PHP if and while 语句无法正常工作


PHP if and while Statements not working properly

我有两个查询的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 查询中。

有人看到我做错了什么吗?

提前感谢,

-安东尼

你有基本的 sintacsis 错误:
=用于分配值
==比较 2 个变量(不在那里存在类型 *)
===比较 2 个变量,包括 there 类型。

您的代码应如下所示:

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'){...}

当"false"与==falsefull值(0,null,false,array(),"')进行比较时,它不会被压缩,因为它被解析为"非空字符串",因此它不是假的

这是您的代码,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>";
        }   
    }
}