Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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中从Oracle获取单行?_Php_Oracle_Row_Fetch_Oracle Call Interface - Fatal编程技术网

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

如何在PHP中从Oracle获取单行?,php,oracle,row,fetch,oracle-call-interface,Php,Oracle,Row,Fetch,Oracle Call Interface,我想知道如何在PHP中从Oracle获取单行 检查我的脚本-: 我想从ITEM_INFO表中获取单行,并将该值与变量$sku和$code进行比较。我应用的逻辑在Mysql中工作,但在Oracle中不工作 每次$sku和$code包含不同的值,所以我只需要将它们与ITEM_INFO表进行比较&如果匹配,则更新相同的标志 $query_fetch = "SELECT ITEM_NAME,SITE_CODE FROM app.ITEM_INFO WHERE ITEM_FLAG = 'N'"; $stm

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

检查我的脚本-: 我想ITEM_INFO表中获取单行,并将该值与变量$sku$code进行比较。我应用的逻辑在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);
    }
 }

请引导我…

基本上,您只需在执行
循环时删除

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


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

ROWNUM = 1

不幸的是,我无法理解代码的其余部分,也无法理解为什么在更新的where子句中已经存在相同的条件时会出现“ifs”。

与mysql\u fetch\u assoc等价的Oracle是:)


您好,Frosty,我按照您的建议进行了尝试,但代码似乎不是从if()语句执行的…它显示如下-:([0]=>FXQV2[ITEM\u NAME]=>ABC12[1]=>CA[SITE\u code]=>CA)Ok。正如Oswaldo所建议的,代码和sku上的
if
条件似乎没有什么用处,因为您的
更新
query=>编辑了我的答案(+在第一次查询中添加了
ROWNUM=1
)好的…但我想检查app.ITEM_INFO表中的所有项目..但我们只是提供rownum=1,所以如何使用它来移动下一行&当它找到条目时,更新查询将工作…所以。。。为什么不只使用约束条件
WHERE ITEM_FLAG='N'
?=>更新了answerHi Oswaldo,如果我想在该表中使用相同的项直到下一次匹配,如何使用相同的项&如果它找到该项,将触发代码中给定的更新查询。如果您想更新表项信息中所有记录,这些记录的项项标志='N'&站点项代码=$code&项名称=$sku,您不必通读进行此更新的所有行,下面的sql将为您完成此更新。我仍然无法理解您试图执行的操作:p
UPDATE APP.ITEM\u INFO SET ITEM\u FLAG='Y',LAST\u UPDATE\u DATE=sysdate,其中ITEM\u NAME='$sku'和SITE\u code='$code'和ITEM\u FLAG='N'
HI Oswaldo,在ITEM\u INFO表中,没有具有不同SITE\u代码和标记为'N'的项。因此,无论$sku(item_name)和$code(site_code)来自该变量中的我的代码,我都希望将其与item_INFO表匹配&如果匹配,则需要将标志更新为“Y”。所以我需要这样的逻辑,如果$sku&$site\u代码与第一行ITEM\u信息不匹配,它必须与下一行进行同样的检查。。。
ROWNUM = 1
$parsed = ociparse($conn, $sql);
while ($row = oci_fetch_assoc($parsed))
{
    // your logic here
}