Oracle
 sql >> Database >  >> RDS >> Oracle

Errore generale:1008 OCIStmtExecute:ORA-01008:non tutte le variabili sono associate

Prova

<?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 cosa fondamentale non è usare query() poiché chiami già prepare() &execute(). Era la query() a fornire l'ORA-1008 poiché non aveva valori per le variabili di collegamento.

Un'altra cosa è non usare addlashes ecc. Con le variabili di associazione Oracle. I dati di collegamento sono sempre separati dal codice e devono essere lasciati come l'utente ha inviato.

Nota inoltre che ho usato bindParam .

Dai un'occhiata agli esempi e ai test PDO e PDO_OCI nel doc e su GitHub . Ci sono alcuni concetti generali che possono essere utili in Il manuale PHP e Oracle sotterraneo .

Infine, usa l'estensione OCI8, non PDO_OCI. OCI8 è migliore e ha più funzioni.