Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Błąd ogólny:1008 OCIStmtExecute:ORA-01008:nie wszystkie zmienne są powiązane

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORACLE Connect by równoważna klauzula w SQL Server

  2. Oracle 11.2 Windows nie może uruchomić się z dwoma wierszami

  3. Podstawowa administracja Oracle 12c Multitenant

  4. ORA-00904:nieprawidłowy identyfikator w tym przypadku

  5. Kolejność usuwania z kolejki Oracle AQ