如何使用PDO获取Oracle上最后一次插入的行?

时间:2013-08-26 10:12:46

标签: php sql oracle pdo

我需要在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;

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

一种替代方法是首先从序列中检索下一个值,然后在insert语句中使用它。