Coba
<?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());
}
?>
Kuncinya adalah tidak menggunakan query() karena Anda sudah memanggil prepare() &execute(). Itu adalah query() yang memberikan ORA-1008 karena tidak memiliki nilai untuk variabel bind.
Hal lain adalah jangan gunakan addlashes dll dengan variabel mengikat Oracle. Data pengikatan selalu terpisah dari kode dan harus dibiarkan saat pengguna dikirimkan.
Perhatikan juga saya menggunakan bindParam .
Lihat contoh dan pengujian PDO dan PDO_OCI di doc dan di GitHub . Ada beberapa konsep umum yang mungkin berguna dalam Manual PHP &Oracle Bawah Tanah .
Terakhir, gunakan ekstensi OCI8, bukan PDO_OCI. OCI8 lebih baik dan memiliki lebih banyak fitur.