試す
<?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()); } ?>
プレ>重要なのは、既に prepare() と execute() を呼び出しているため、query() を使用しないことです。バインド変数の値がなかったため、ORA-1008 が発生したのは query() でした。
もう1つのことは、Oracleバインド変数でaddslashesなどを使用しないことです。バインド データは常にコードから分離されており、ユーザーが送信したままにしておく必要があります。
bindParam を使用したことにも注意してください .
doc で PDO および PDO_OCI の例とテストを確認してください。 および GitHub で 。 アンダーグラウンド PHP &Oracle マニュアル .
最後に、PDO_OCI ではなく、OCI8 拡張を使用します。 OCI8 はより優れており、より多くの機能を備えています。