【问题标题】:Retrieving Last Inserted ROWID In PHP/OCI在 PHP/OCI 中检索最后插入的 ROWID
【发布时间】:2013-12-02 18:20:19
【问题描述】:

是否可以在 PHP 中检索最后插入的 Oracle 行的 rowid?我正在尝试:

$statement = oci_parse($conn, "INSERT INTO myTable (...) VALUES ( ...)");
$results = oci_execute($statement);
while($row = oci_fetch_assoc($statement)) {
    $rowid = $row['ROWID'];
}

没有运气。我在 fetch 行收到错误 define not done before fetch 或 execute and fetch

【问题讨论】:

    标签: php oracle oracle-call-interface


    【解决方案1】:

    声明:

    $var = "AAAV1vAAGAAIb4CAAC";
    

    用途:

    INSERT INTO myTable (...) VALUES ( ...)
    RETURNING RowId INTO :p_val
    

    将您的变量绑定到 PHP 变量:

    oci_bind_by_name($statement, ":p_val", $val, 18);
    

    【讨论】:

    • 嗨,Ben,我收到以下错误:Query Failed: INSERT INTO testtable (ABC) VALUES (6) RETURNING RowId INTO :id 我关注了您帖子中的所有内容。有任何想法吗?谢谢。
    • @Tom 我猜它应该是“INSERT INTO testtable (ABC) VALUES (6) RETURNING ABC INTO :id”,因为它似乎是 RowId列在 testtable 上不存在
    【解决方案2】:

    由于前面的答案对我来说不是很清楚,因为它缺少一些重要信息,所以我会指出一个类似的方法。

    在您的 SQL 语句中,添加 RETURNING INTOclause。

    $statement = oci_parse($conn, "INSERT INTO myTable (...) VALUES ( ...) RETURNING ID INTO :id");
    

    这里ID 是您要返回的列的名称。在执行$statement 之前,您需要将一个PHP 变量绑定到您的返回值。这里我使用了$returnId(你不需要事先声明或指定任何默认值)。

    oci_bind_by_name($statement, ":id", $returnId);
    

    只有绑定变量后,语句才能执行。

    $success = @oci_execute($statement);
    

    $returnId 现在具有先前插入的ID 列的值。

    【讨论】:

    • 您应该在绑定函数上指定变量的大小和类型,例如:oci_bind_by_name($statement, ":id", $returnId, -1, SQLT_INT);否则你会尝试一些奇怪的不完整变量值问题。例如,你会得到 ID=1234 或其他东西,而不是 ID=12345。
    猜你喜欢
    • 1970-01-01
    • 2011-12-21
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2014-08-04
    • 2013-04-01
    相关资源
    最近更新 更多