sql >> データベース >  >> RDS >> Oracle

一般エラー:1008 OCIStmtExecute:ORA-01008:すべての変数がバインドされていません

    試す

    <?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 はより優れており、より多くの機能を備えています。




    1. MySQL:Group By&Count複数のフィールド

    2. usingステートメントを使用してMySQL接続を閉じることはできますか?

    3. 巨大なblobデータをクエリする方法

    4. 挿入内のPostgresCASEステートメント