Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

PDO_OCI - vào một trường tắc nghẽn

Tôi đã tìm thấy một giải pháp ở đây:

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

[2009-08-11 11:27 UTC] lehresman tại gmail dot comwrote:

Một đồng nghiệp đã phát hiện ra giải pháp. Khi xử lý CLOB trong Oracle bằng PDO, đừng coi nó như LOB. Bạn cần liên kết nó dưới dạng PDO ::PARAM_STR và cung cấp cho nó độ dài của chuỗi (tham số thứ 4 đó là khóa, nếu không thì nó không thành công với một lỗi lộn xộn về kiểu LONG).

Dưới đây là một ví dụ về cách chèn thành công vào CLOB trong 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();
}

Hoạt động hoàn toàn tốt đối với tôi ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Unicode Spooling

  2. làm thế nào để gán giá trị cho biến trong biểu thức cho một khối PL / SQL?

  3. Oracle Joins (Sql Joins) là gì?

  4. Tiếp tục Chèn trong Oracle khi ngoại lệ được nâng lên

  5. Bỏ nội dung của lệnh SQLplus trong UNIX?