Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Erro geral:1008 OCIStmtExecute:ORA-01008:nem todas as variáveis ​​vinculadas


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

?>

A principal coisa é não usar query() já que você já chama prepare() &execute(). Era o query() que estava dando o ORA-1008 pois não tinha valores para as variáveis ​​de bind.

Outra coisa é não usar addlashes etc com variáveis ​​de ligação do Oracle. Os dados de ligação são sempre separados do código e devem ser deixados conforme o usuário enviou.

Observe também que usei bindParam .

Confira os exemplos e testes de PDO e PDO_OCI no doc e no GitHub . Existem alguns conceitos gerais que podem ser úteis em O Manual Subterrâneo de PHP e Oracle .

Finalmente, use a extensão OCI8, não PDO_OCI. OCI8 é melhor e tem mais recursos.