Опитайте
<?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());
}
?>
Ключовото нещо е да не използвате query(), тъй като вече извиквате подготви() &изпълни(). Именно query() даваше ORA-1008, тъй като нямаше стойности за свързващите променливи.
Друго нещо е да не използвате addslashes и т.н. с променливи за свързване на Oracle. Данните за обвързване винаги са отделни от кода и трябва да бъдат оставени така, както ги е изпратил потребителят.
Също така имайте предвид, че използвах bindParam .
Вижте примерите и тестовете за PDO и PDO_OCI в doc и на GitHub . Има някои общи концепции, които могат да бъдат полезни в Подземното ръководство за PHP и Oracle .
И накрая, използвайте разширението OCI8, а не PDO_OCI. OCI8 е по-добър и има повече функции.