Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Kesalahan umum:1008 OCIStmtExecute:ORA-01008:tidak semua variabel terikat

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mengonversi nilai yang dipisahkan koma menjadi beberapa baris

  2. Bagaimana mendefinisikan Prosedur Paket Oracle di H2 untuk Pengujian

  3. Mengkonfigurasi Oracle OCI8 untuk windows 64 bit

  4. Koneksi Php Oracle:oci_connect():ORA-24315:kesalahan tipe atribut ilegal

  5. fungsi to_date dengan sysdate