sql >> Base de Datos >  >> RDS >> Oracle

Error general:1008 OCIStmtExecute:ORA-01008:no todas las variables enlazadas

Prueba

<?php

$did = 70;
$mid = 204;

try
{
    $base = new PDO('oci:dbname=localhost', 'hr', 'hr');
    $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql= "SELECT * FROM DEPARTMENTS WHERE DEPARTMENT_ID = :did AND MANAGER_ID = :mid";

    $resultado = $base->prepare($sql);
    $resultado->bindParam(":did", $did);
    $resultado->bindParam(":mid", $mid);

    $resultado->execute();

    while ($row = $resultado->fetch(PDO::FETCH_ASSOC)) {
        foreach ($row as $item) {
            echo "$item ";
        }
        echo "\n";
    }

}
catch(Exception $e)
{
    die("Error: " .$e->getMessage());
}

?>

La clave es no usar query() ya que ya llamaste a prepare() &execute(). Fue la consulta() la que estaba dando el ORA-1008 ya que no tenía valores para las variables de vinculación.

Otra cosa es no usar barras adicionales, etc. con variables de vinculación de Oracle. Los datos de vinculación siempre están separados del código y deben dejarse como los envió el usuario.

También tenga en cuenta que usé bindParam .

Consulte los ejemplos y pruebas de PDO y PDO_OCI en el doc y en GitHub . Hay algunos conceptos generales que pueden ser útiles en El manual clandestino de PHP y Oracle .

Finalmente, use la extensión OCI8, no PDO_OCI. OCI8 es mejor y tiene más funciones.