Oracle
 sql >> база данни >  >> RDS >> Oracle

PDO_OCI - в поле clob

Намерих решение тук:

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

[2009-08-11 11:27 UTC] lehresman в gmail точка comwrote:

Един колега откри решението. Когато работите с CLOB в Oracle, използвайки PDO, не го третирайте като LOB. Трябва да го обвържете като PDO::PARAM_STR и да му дадете дължината на низа (този 4-ти параметър е ключът, в противен случай се проваля със съобщение за грешка относно типа LONG).

Ето пример за това как успешно да вмъкнете в CLOB в 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();
}

Работи перфектно за мен...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Еквивалент на \G на MySQL в SQL*Plus на Oracle

  2. SQL:AVG с NULL стойности

  3. ORA 03134 грешка при свързване на ODP.NET 12 (VS2012) към Oracle база данни 11

  4. Динамично вземане на проби Killing Me in 12c

  5. Как да направя индекса неизползваем и след това да го изградя отново в индекс