【问题标题】:How to get the row of the last insert on Oracle using PDO?如何使用 PDO 获取 Oracle 上最后一个插入的行?
【发布时间】:2013-08-28 19:10:42
【问题描述】:

我需要获取在 PHP 中使用 PDO 插入的最后一行。我一直在搜索,我找到了 PDO::lastInsertId,但它在 Oracle 上不起作用。

我有什么选择?其他方法可以做到这一点?我想使用 PDO 获取序列的当前值(在该表中我使用序列来增加 ID),但我不知道是否可以。

更新 1:

这是我的代码。

static function insertarProveedor($name, $address, $phone, $email) {
    $con = conexionBD();
    try {
        $stmt = $con->prepare("INSERT INTO Proveedores (NOMBRE, DIRECCION, TELEFONO, EMAIL) VALUES (?, ?, ?, ?)
                        RETURNING OID_PROVEEDOR INTO :id");
        $stmt->bindParam(1, $nombre);
        $stmt->bindParam(2, $direccion);
        $stmt->bindParam(3, $telefono);
        $stmt->bindParam(4, $correo);
        $stmt->bindParam('OID_PROVEEDOR', $id, PDO::PARAM_INT, 8);
    } catch (PDOException $e) {
        echo "Error".$e->GetMessage();
    }
    return $id;
}

我收到以下消息错误:

ErrorSQLSTATE[HY093]:参数号无效:混合命名和 位置参数

注意:未定义变量:第 43 行 D:\xampp\htdocs\Gestor\include\inserciones.inc 中的 id

第 43 行是return $id;

【问题讨论】:

  • 更新 1 后的代码是正确的,但变量名称不匹配,因此 OID_PROVEEDOR 的 SQL 值试图存储为变量 :id,bindParam 试图将 PHP var $id 附加为存储的 var :OID_PROVEEDOR跨度>

标签: php sql oracle pdo


【解决方案1】:

另一种选择是首先从序列中检索下一个值,然后在插入语句中使用它。

【讨论】:

    【解决方案2】:

    你可以使用oracle特有的returning id into var方法

    $query = "INSERT INTO employees (name) VALUES ('Jones') RETURNING employee_no INTO     :employee_no";
    $stmt = $pdo->prepare($query);
    $stmt->bindParam('employee_no', $employee_no, PDO::PARAM_INT, 8);
    $stmt->execute();
    

    那么$employee_no 将具有最后一个 id。

    【讨论】:

    • 我添加了这些代码行,但我得到的是一条错误消息。错误在哪里?
    猜你喜欢
    • 2011-06-30
    • 2014-09-10
    • 2012-05-27
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多