Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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
PHP if和while语句工作不正常_Php_Mysql_Sql_Oracle_If Statement - Fatal编程技术网

PHP if和while语句工作不正常

PHP if和while语句工作不正常,php,mysql,sql,oracle,if-statement,Php,Mysql,Sql,Oracle,If Statement,我有两个查询的php代码。一个是在Oracle数据库中,结果是大约100行数据(数据中有SKU编号)。另一个是mysql数据库,包含大约30行数据(数据中还包含SKU编号) 我需要逐行比较第一个查询和第二个查询中的每个SKU。如果第一个查询中的SKU也出现在第二个查询中,那么我需要它来回显SKU 第二个查询中的所有SKU都在第一个查询中,因此我希望结果会回显所有30个SKU,但事实并非如此。根据我修改语法的方式,它会回显17行、100行或根本没有行 值得注意的是,两个查询都可以正常工作。Orac

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

有人知道我做错了什么吗

提前感谢,


-Anthony

您有基本的sintacsis错误:
=
用于赋值
=
比较两个变量(不考虑类型*)
=
比较两个变量,包括三种类型

您的代码应该如下所示:

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>";
    }   
while($rows=mysql\u fetch\u assoc($result))
{
$m_sku=$rows['sku'];
如果($m_sku==$sku)
{
$mailer=false;//==用于比较,=用于分配
}   
}
如果($mailer==false)
{
echo$m_sku;
回声“
”; }
if($member=='false'){…}


当将'false'与
=
比较为false-full值时(0,null,false,array(),'')。。由于它被解析为一个“非空字符串”,因此它不会被解析为“falsefull”这是您的代码,MySQL connect被移动到循环之外,并且==分配被修复

<?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>";
        }   
    }
}

mysql在while循环中连接,您只需要连接一次,而不是在每个循环中。即使我不理解您的问题,假设
if($mailer='false')
应该在您的第二个
中,而
您想签出
$mailer
。还有,为什么不使用布尔值而不是字符串“false”@马克·贝克:不,那只是一个错字来代替真实的信息。我会更正。
$mailer=='false'
应该是
$mailer='false'
或者可能真的应该是
$mailer=false这是一个遗留应用程序吗
mysql\u query
不应在新代码中使用,因为它已被弃用,如果使用不正确,会很危险,并且将从未来版本的PHP中删除。一个现代的替代品。类似这样的指南对如何使应用程序保持最新有很多建议。下面是我用上面的代码替换我的原始代码时给出的错误:警告:oci_fetch_assoc():ORA-24374:define not done before fetch或execute and fetch in/var/www/html/ugwarehouse/sku_test2.php,第214行警告:mysql_fetch_assoc()预计参数1是resource,字符串在第219行的/var/www/html/ugwarehouse/sku_test2.php中给出。我想当查询失败时,通常会出现这些错误,您是否替换了所有的[bracketed text]并设置了
$user、$pswd、$hst
变量?是的,我替换了所有的bracketed文本。是否有一个mysql等价于oci_parse?如果mysql查询存在,我可能需要使用该函数。我尝试了上面的代码。它只给出两个查询中匹配的前21个SKU。我不明白为什么它不能匹配所有30个SKU。这是朝着正确的方向迈出的一步,但它仍然没有匹配所有30个SKU。这是最接近的答案,实际上帮助我半解决了这个问题。谢谢