3

PHP で Oracle から単一の行をフェッチする方法を知りたいですか?

スクリプトをチェックしてください-: 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);
    }
 }

ガイドしてください...

4

3 に答える 3

2

Oracle で 1 行をフェッチするには、where 句に次の条件を追加します。

ROWNUM = 1

残念ながら、コードの残りの部分を理解できませんでした。更新の where 句に同じ条件が既にある場合、「if」の理由を理解できませんでした。

于 2012-04-19T12:33:28.977 に答える
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);
于 2012-04-19T12:12:41.060 に答える
1

mysql_fetch_assoc に相当する Oracle はoci_fetch_assocです:)

$parsed = ociparse($conn, $sql);
while ($row = oci_fetch_assoc($parsed))
{
    // your logic here
}
于 2012-04-19T13:44:25.183 に答える