【问题标题】:Get auto incremented value from INSERT statement and assigning it to PHP从 INSERT 语句中获取自动递增的值并将其分配给 PHP
【发布时间】:2014-01-28 13:19:28
【问题描述】:

我正在使用 Zend 框架和 Oracle,下面是我的 save() 函数

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();
  }

}

在我的 INSERT 语句中插入 SNO_PK 作为自动递增值,我在这里要做的是我想从该 INSERT 语句中获取 SNO_PK 值并将其分配给 PHP 变量,然后返回它。我是 Oracle 的新手,任何帮助将不胜感激,谢谢。

我见过 RETURNING 子句,但不明白如何在我的情况下使用它。

【问题讨论】:

  • 插入后运行select Sno_seq.currval from dual
  • 好的,谢谢,但是如何从 PHP 中返回该值?
  • 与任何其他 SELECT 语句一样。抱歉我不懂PHP

标签: oracle zend-framework


【解决方案1】:

检查get_class_methods($query),您会发现类似$query->lastInsertId(); 的内容。

附言。注意如何将变量放入 SQL 中。 SQLInjection 的捷径;)

【讨论】:

  • 我用的是oracle,不是mysql。
  • 手册说如果您提供 2 个参数(表名、列名)作为序列的一部分,此函数将与 Oracle 一起使用。如果您遵循使用序列为其生成值的表名和列名以及后缀“_seq”来命名序列的约定。如果您的序列对象的名称不遵循此命名约定,请改用 lastSequenceId() 方法。此方法采用单个字符串参数,按字面意思命名序列。链接 --> framework.zend.com/manual/1.12/en/…
【解决方案2】:

这很简单,当你执行查询时,你会突然得到它的最后一个(增量值)。我已经实现了你的代码。

$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();
  }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    相关资源
    最近更新 更多