sql >> Database teknologi >  >> RDS >> Oracle

Generel fejl:1008 OCISTmtExecute:ORA-01008:ikke alle variable er bundet

Prøv

<?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 vigtigste er ikke at bruge query(), da du allerede kalder prepare() &execute(). Det var forespørgslen(), der gav ORA-1008, da den ikke havde værdier for bindevariablerne.

En anden ting er, at du ikke skal bruge addslashes osv. med Oracle-bindingsvariabler. Bindingsdataene er altid adskilt fra koden og skal efterlades som brugeren indsendte.

Bemærk også, at jeg brugte bindParam .

Se eksemplerne og testene på PDO og PDO_OCI i doc og på GitHub . Der er nogle generelle begreber, der kan være nyttige i The Underground PHP &Oracle Manual .

Brug endelig OCI8-udvidelsen, ikke PDO_OCI. OCI8 er bedre og har flere funktioner.




  1. Avanceret SQL:CROSS APPLY og OUTER APPLY

  2. Android SQLite lukket undtagelse

  3. Applikation vs Database Resident Connection Pool

  4. Laravel 4:Where Not Exists