Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Allgemeiner Fehler:1008 OCIStmtExecute:ORA-01008:nicht alle Variablen gebunden

Versuchen Sie es

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

?>

Das Wichtigste ist, query() nicht zu verwenden, da Sie bereits "prepare()" und "execute()" aufrufen. Es war die query(), die den ORA-1008 ausgab, da sie keine Werte für die Bind-Variablen hatte.

Eine andere Sache ist, keine Addlashes usw. mit Oracle-Bind-Variablen zu verwenden. Die Bindungsdaten sind immer vom Code getrennt und sollten so belassen werden, wie der Benutzer sie übermittelt hat.

Beachten Sie auch, dass ich bindParam verwendet habe .

Sehen Sie sich die PDO- und PDO_OCI-Beispiele und -Tests im doc an und auf GitHub . Es gibt einige allgemeine Konzepte, die in Das unterirdische PHP- und Oracle-Handbuch .

Verwenden Sie schließlich die OCI8-Erweiterung, nicht PDO_OCI. OCI8 ist besser und hat mehr Funktionen.