sql >> Databáze >  >> RDS >> Oracle

Obecná chyba:1008 OCIStmtExecute:ORA-01008:nejsou svázány všechny proměnné

Zkuste

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

?>

Klíčovou věcí není použití query(), protože už voláte Prepare() &execute(). ORA-1008 dával dotaz(), protože neměl hodnoty pro proměnné vazby.

Další věc je nepoužívat lomítka atd. s proměnnými vazby Oracle. Data vazby jsou vždy oddělena od kódu a měla by být ponechána tak, jak ji uživatel odeslal.

Všimněte si také, že jsem použil bindParam .

Podívejte se na příklady a testy PDO a PDO_OCI v doc a na GitHub . Existují některé obecné koncepty, které mohou být užitečné v Příručka Underground PHP &Oracle .

Nakonec použijte rozšíření OCI8, nikoli PDO_OCI. OCI8 je lepší a má více funkcí.




  1. Je nějaká škoda při resetování automatického přírůstku?

  2. Jak používat funkci Rand v kombinaci s Union v MySQL

  3. Použití Kubernetes k nasazení PostgreSQL

  4. Jak vytvořit funkci přidání přítele / přítele v PHP?