如何在PHP中从Oracle获取单行?

时间:2012-04-19 12:01:12

标签: php oracle row fetch oci

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

Chedck我的剧本 - : 我想从 ITEM_INFO 表&中获取单行将这些值与变量 $ sku &进行比较 $ code ...我应用的逻辑在Mysql中有效但在Oracle中无效...

每次$ sku& $ code包含diff。值,所以我只需要将它们与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);
    }
 }

引导我......

3 个答案:

答案 0 :(得分:2)

基本上,您只需删除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);

答案 1 :(得分:2)

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

ROWNUM = 1

遗憾的是无法理解你的其余代码,如果你在更新的where子句中已经有相同的条件,就不明白为什么会出现“ifs”。

答案 2 :(得分:1)

相当于mysql_fetch_assoc的Oracle是oci_fetch_assoc:)

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