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.