2014-01-27 34 views
0

我使用Zend框架和Oracle,下面是我的保存()函數獲取從INSERT語句自動遞增的值,並將其賦值給PHP

在我的INSERT語句
public function save() 
{ 

    $time = strtotime($_POST['DeliveryDate']); 
    $deliveryDate = date('d-M-Y',$time); 

    try{ 
    $result = ''; 
    $dml = "INSERT INTO NOBL_TEC_EFT(SNO_PK, ITEM, ITEM_TYPE, QUANTITY, UNIT_PRICE, NEED_BY_DATE, SITE, DELIVER_TO_LOCATION, AFE, TASK, REQUESTOR, ATTRIBUTE1, ATTRIBUTE2) VALUES (Sno_seq.nextval, '".$_POST['Item']."', '".$_POST['ItemType']."', ".(int)$_POST['Quantity'].", ".(int)$_POST['TotalPrice'].", '".$deliveryDate ."', '".$_POST['Site']."', '".$_POST['DeliverToLoc']."', '".$_POST['Afe']."', 'Task', '".$_POST['Requestor']."', '".$_POST['CodeOne']."', '".$_POST['CodeTwo']."')"; 

    $query = Application_Model_DbTable_Eftrqsthead::getDefaultAdapter(); 
    // echo $dml; 
    $query = $query->query($dml); 

     if($query){ 
     return true; 
     }else{ 
     return false; 
     } 

    }catch(Exception $e){ 
     echo $e->getMessage(); 
    } 

} 

上面我將SNO_PK爲自動遞增的值,我想在這裏做的是我想從該INSERT語句獲取SNO_PK值並將其分配給一個PHP變量,然後返回它。我是Oracle新手,任何幫助將不勝感激,謝謝。

我已經看過RETURNING子句,但並不瞭解如何在我的情況下使用它。

+0

在插入後運行'從雙選'選擇Sno_seq.currval。 –

+0

好的謝謝,但如何從PHP返回該值? – vamsi

+0

像其他任何SELECT語句一樣。對不起,我不知道PHP –

回答

0

檢查get_class_methods($query),你會發現類似$query->lastInsertId();

PS。注意如何將變量放入SQL中。 SQLInjection的簡短方法;)

+0

我用的是oracle,不是mysql。 – vamsi

+1

手冊說,如果您提供了作爲序列一部分的2個參數(表名,列名),該函數將與Oracle協同工作。如果遵循約定,使用序列生成值的表名和列名以及後綴「_seq」命名序列。如果序列對象的名稱不符合此命名約定,請改爲使用lastSequenceId()方法。這個方法接受一個字符串參數,從字面上命名序列。鏈接 - > http://framework.zend.com/manual/1.12/en/zend.db.adapter.html#zend.db.adapter.write.lastinsertid – Volvox

0

這很簡單,當你執行查詢時,突然你會得到它的最後一個(遞增的值)。我已經實現了你的代碼。

$query = Application_Model_DbTable_Eftrqsthead::getDefaultAdapter(); 
    // echo $dml; 
    $query = $query->query($dml); 

     if($query){ 
     echo $query; 
     return true; 
     }else{ 
     return false; 
     } 

    }catch(Exception $e){ 
     echo $e->getMessage(); 
    } 

}