Oracle
 sql >> Baza danych >  >> RDS >> Oracle

PDO_OCI - w pole kloba

Tutaj znalazłem rozwiązanie:

https://bugs.php.net/bug.php?id=57095

[2009-08-11 11:27 UTC] lehresman w gmail dot napisał:

Współpracownik odkrył rozwiązanie. Kiedy masz do czynienia z CLOB w Oracle przy użyciu PDO, nie traktuj tego jako LOB. Musisz powiązać go jako PDO::PARAM_STR i podać długość ciągu (ten czwarty parametr jest kluczem, w przeciwnym razie pojawia się komunikat o błędzie dotyczący typu LONG).

Oto przykład, jak pomyślnie wstawić do CLOB w Oracle:

<?php

/*
CREATE TABLE clob_test (my_clob CLOB)
*/

$big_string = "";
for ($i=0; $i < 10000; $i++)
    $big_string .= rand(100000,999999)."\n";

try {
    $pdo = new PDO("oci:dbname=TESTDB", "TESTUSER", "TESTPW");
    $stmt = $pdo->prepare("INSERT INTO healthbit.clob_test (my_clob) VALUES (:cl)");
    $stmt->bindParam(":cl", $big_string, PDO::PARAM_STR, strlen($big_string));
    $pdo->beginTransaction();
    if (!$stmt->execute()) {
        echo "ERROR: ".print_r($stmt->errorInfo())."\n";
        $pdo->rollBack();
        exit;
    }
    $pdo->commit();

    $stmt = $pdo->prepare("SELECT my_clob FROM healthbit.clob_test");
    $stmt->execute();
    $row = $stmt->fetch();
    $str = "";
    while ($tmp = fread($row[0],1024))
        $str .= $tmp;
    echo strlen($str); // prints 70000
} catch (Exception $e) {
    echo "ERROR: ";
    echo $e->getMessage();
    $pdo->rollBack();
}

U mnie działa idealnie...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy zagnieżdżone bloki mają jakikolwiek wpływ na wydajność w procedurach PL/SQL?

  2. Pakiet :cx_Oracle dla Pythona 3.5, windows64 bit. Wyrocznia 11.2.0.1.0

  3. Funkcja wymiany Oracle

  4. php oci8 ext nie ładuje się Nie można załadować biblioteki dynamicznej

  5. Funkcja LEAST() w Oracle