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 ...