sql >> Databasteknik >  >> RDS >> Oracle

Allmänt fel:1008 OCISTmtExecute:ORA-01008:alla variabler är inte bundna

Försök

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

?>

Det viktigaste är att inte använda query() eftersom du redan anropar prepare() &execute(). Det var frågan() som gav ORA-1008 eftersom den inte hade värden för bindningsvariablerna.

En annan sak är att inte använda addslashes etc med Oracle-bindningsvariabler. Bindningsdata är alltid separat från koden och bör lämnas som användaren skickade.

Observera också att jag använde bindParam .

Kolla in PDO och PDO_OCI exempel och tester i dokumentet och på GitHub . Det finns några allmänna begrepp som kan vara användbara i The Underground PHP &Oracle Manual .

Använd slutligen tillägget OCI8, inte PDO_OCI. OCI8 är bättre och har fler funktioner.




  1. Cayenne, Postgres:generering av primär nyckel

  2. Varför utvärderas NULL =NULL till false i SQL-servern

  3. Anrop till medlem funktion query() på Null

  4. Kapslade går med i Codeigniter