【问题标题】:How to fetch single row from Oracle in PHP?如何在 PHP 中从 Oracle 获取单行?
【发布时间】:2012-04-30 22:32:33
【问题描述】:

我想知道如何在 PHP 中从 Oracle 中获取单行数据?

检查我的脚本-: 我想从 ITEM_INFO 表中获取单行,并将该值与变量 $sku$code 进行比较。 .Logic 我应用的适用于 Mysql 但不适用于 Oracle...

每次 $sku & $code 都包含差异。值,所以我只需要将它们与 ITEM_INFO 表进行比较,如果匹配,则更新相同的标志...

$query_fetch = "SELECT ITEM_NAME,SITE_CODE FROM app.ITEM_INFO WHERE ITEM_FLAG = 'N'";
$stmt = oci_parse($conn,$query_fetch);
oci_execute($stmt);
while(($row = oci_fetch_array($stmt, OCI_BOTH))) 
{   
    $ITEM_NAME = ($row["ITEM_NAME"]);                       
    $SITE_CODE = ($row["SITE_CODE"]);   

    if(($ITEM_NAME === $sku) && ($SITE_CODE === $code))
    {   
              $query_ora_update = "UPDATE app.ITEM_INFO SET ITEM_FLAG= 'Y', LAST_UPDATE_DATE = sysdate WHERE ITEM_NAME = '$sku' AND SITE_CODE = '$code' AND ITEM_FLAG = 'N' ";
                                            $parse_result = oci_parse($conn,$query_ora_update);
    $result = oci_execute($parse_result);
    oci_commit($conn);
    oci_close($conn);
    }
 }

请指导我...

【问题讨论】:

    标签: php oracle row fetch oracle-call-interface


    【解决方案1】:

    基本上,您只需删除while 循环。

    这是应用该更改的代码重写(+ 使用了太多括号,降低了代码的可读性 + 您应该使用 SQL 绑定来避免注入):

    $query_ora_update = "UPDATE app.ITEM_INFO SET ITEM_FLAG= 'Y', LAST_UPDATE_DATE = sysdate WHERE ITEM_FLAG = 'N'";
    $parse_result = oci_parse($conn, $query_ora_update);
    $result = oci_execute($parse_result);
    
    oci_commit($conn);
    oci_close($conn);
    

    【讨论】:

    • 您好 Frosty,我按照您的建议进行了尝试,但似乎代码没有从 if() 语句中执行...
    • 显示如下-: ( [0] => FXQV2 [ITEM_NAME] => ABC12 [1] => CA [SITE_CODE] => CA )
    • 好的。正如 Oswaldo 建议的那样,代码和 sku 上的 if 条件似乎没有用,因为您在 UPDATE 查询中已经有约束 => 编辑了我的答案(+ 在第一个查询中添加了 ROWNUM = 1
    • 好的...但我想检查所有项目 app.ITEM_INFO 表..但我们只是提供 rownum =1 所以如何使用它会移动到下一行 &当它找到条目时,更新查询将起作用...
    • 那么...为什么不只使用约束WHERE ITEM_FLAG = 'N' 只执行UPDATE 查询呢? => 更新答案
    【解决方案2】:

    与 mysql_fetch_assoc 等效的 Oracle 是 oci_fetch_assoc :)

    $parsed = ociparse($conn, $sql);
    while ($row = oci_fetch_assoc($parsed))
    {
        // your logic here
    }
    

    【讨论】:

      【解决方案3】:

      要在 Oracle 中获取单行,请在 where 子句中添加以下条件:

      ROWNUM = 1
      

      很遗憾无法理解您的代码的其余部分,如果您在更新的 where 子句中已经有相同的条件,不理解为什么“ifs”。

      【讨论】:

      • 嗨 Oswaldo,如果我想在该表中使用相同的直到下一个匹配项并且如果它找到该条目,它将触发我的代码中给出的更新查询,如何使用相同的。
      • 如果您想更新表 ITEM_INFO 中具有 ITEM_FLAG = 'N' & SITE_CODE = $code & ITEM_NAME = $sku 的所有记录,您不必执行此更新的所有行,sql下面会为你做。我仍然无法理解您要做什么:p UPDATE APP.ITEM_INFO SET ITEM_FLAG = 'Y', LAST_UPDATE_DATE = sysdate WHERE ITEM_NAME = '$sku' AND SITE_CODE = '$code' AND ITEM_FLAG = 'N'
      • HI Oswaldo,在 ITEM_INFO 表中没有。具有不同站点代码和标记为“N”的项目。因此,无论 $sku(item_name) 和 $code(site_code) 来自我在该变量中的代码,我都希望将其与 ITEM_INFO 表匹配,如果匹配则需要将标志更新为“Y”。所以我需要这样的逻辑,如果 $sku & $site_code 与 ITEM_INFO 的第一行不匹配,它必须同样检查下一行...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 2018-10-03
      相关资源
      最近更新 更多