sql >> Database >  >> RDS >> Oracle

Algemene fout:1008 OCIStmtExecute:ORA-01008:niet alle variabelen gebonden

Probeer

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

?>

Het belangrijkste is om geen query() te gebruiken, aangezien je al prepare() &execute() aanroept. Het was de query() die de ORA-1008 opleverde omdat deze geen waarden had voor de bindvariabelen.

Een ander ding is dat je geen addlashes enz. gebruikt met Oracle-bindvariabelen. De bindgegevens staan ​​altijd los van de code en moeten worden achtergelaten zoals de gebruiker deze heeft ingediend.

Merk ook op dat ik bindParam heb gebruikt .

Bekijk de PDO en PDO_OCI voorbeelden en tests in de doc en op GitHub . Er zijn enkele algemene concepten die nuttig kunnen zijn in De ondergrondse PHP &Oracle-handleiding .

Gebruik ten slotte de OCI8-extensie, niet PDO_OCI. OCI8 is beter en heeft meer functies.




  1. django.db.utils.ProgrammingError:relatie bot_trade bestaat niet

  2. SQLite-voorbeelddatabase

  3. Oracle Regexp mislukt in SQL

  4. Hoe krijg ik via mysql de meest populaire woorden in een tabel?