Oracle
 sql >> Base de données >  >> RDS >> Oracle

Erreur générale :1008 OCIStmtExecute :ORA-01008 :toutes les variables ne sont pas liées

Essayez

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

?>

L'essentiel n'est pas d'utiliser query() puisque vous appelez déjà prepare() &execute(). C'était la requête () qui donnait l'ORA-1008 car il n'avait pas de valeurs pour les variables de liaison.

Une autre chose est de ne pas utiliser d'addlashes, etc. avec les variables de liaison Oracle. Les données de liaison sont toujours séparées du code et doivent être laissées telles que soumises par l'utilisateur.

Notez également que j'ai utilisé bindParam .

Découvrez les exemples et tests PDO et PDO_OCI dans la doc et sur GitHub . Certains concepts généraux peuvent être utiles dans Le manuel souterrain de PHP et d'Oracle .

Enfin, utilisez l'extension OCI8, pas PDO_OCI. OCI8 est meilleur et a plus de fonctionnalités.