Wypróbuj
<?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());
}
?>
Kluczową rzeczą jest nieużywanie query(), ponieważ już wywołujesz metody Prepare() i execute(). To zapytanie() dało ORA-1008, ponieważ nie posiadało wartości dla zmiennych wiązania.
Inną rzeczą jest to, że nie używaj ukośników itp. ze zmiennymi wiążącymi Oracle. Dane powiązania są zawsze oddzielone od kodu i powinny być pozostawione jako przesłane przez użytkownika.
Zauważ też, że użyłem bindParam .
Sprawdź przykłady i testy PDO i PDO_OCI w doc i na GitHub . Istnieje kilka ogólnych pojęć, które mogą być przydatne w Podręcznik PHP i Oracle Underground .
Na koniec użyj rozszerzenia OCI8, a nie PDO_OCI. OCI8 jest lepszy i ma więcej funkcji.