Oracle
 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());
}

?>

Ключовото нещо е да не използвате query(), тъй като вече извиквате подготви() &изпълни(). Именно query() даваше ORA-1008, тъй като нямаше стойности за свързващите променливи.

Друго нещо е да не използвате addslashes и т.н. с променливи за свързване на Oracle. Данните за обвързване винаги са отделни от кода и трябва да бъдат оставени така, както ги е изпратил потребителят.

Също така имайте предвид, че използвах bindParam .

Вижте примерите и тестовете за PDO и PDO_OCI в doc и на GitHub . Има някои общи концепции, които могат да бъдат полезни в Подземното ръководство за PHP и Oracle .

И накрая, използвайте разширението OCI8, а не PDO_OCI. OCI8 е по-добър и има повече функции.




  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 Big Data SQL

  2. Как да се справим с едновременните вмъквания в DB, ​​причиняващи нарушение на правило за записите в базата данни?

  3. Одитна история на множество таблици в базата данни

  4. Грешка на Oracle ORA-12154 на локален IIS, но не и със сървър за разработка на Visual Studio

  5. Изисква ли се ODP.NET за Oracle 11g Client?