Patch PdoOciClobReadError-test-with-more-debug-output for PDO OCI Bug #60994
Patch version 2012-02-06 16:19 UTC
Return to Bug #60994 |
Download this patch
Patch Revisions:
Developer: php.net@boedah.de
// coding: utf-8
mb_internal_encoding('utf-8');
$dsn = 'oci:dbname=(DESCRIPTION=(ADDRESS_LIST=(
ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
(CONNECT_DATA=(SID=xe)));charset=AL32UTF8';
$username = 'USER';
$password = 'PW';
$lobTestTablename = 'TEST_LOB';
/*
create table TEST_LOB (
tl_id NUMBER(3),
tl_byte_16 VARCHAR2(16 BYTE),
tl_char_16 VARCHAR2(16 CHAR),
tl_byte_4000 VARCHAR2(4000 BYTE),
tl_char_4000 VARCHAR2(4000 CHAR),
tl_blob BLOB,
tl_clob CLOB,
tl_date DATE,
tl_number NUMBER
)
*/
$id = -1;
$data = '…';
$length = 8193;
// this actually works:
//$data = '.';
//$length = 100000;
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec("delete from $lobTestTablename where tl_id < 0");
$clobData = str_repeat($data, $length);
printf("writing into DB: strlen: %d, mb_strlen: %d\n", strlen($clobData), mb_strlen($clobData));
$pdoStmt = $pdo->prepare("insert into $lobTestTablename (tl_id, tl_clob) values (?, ?)");
/* @var $pdoStmt PDOStatement */
$pdoStmt->bindParam(1, $id, PDO::PARAM_INT, null, null);
$pdoStmt->bindParam(2, $clobData, PDO::PARAM_STR, strlen($clobData), null);
$pdoStmt->execute();
$pdoStmt = $pdo->query("select length(tl_clob) from $lobTestTablename where TL_ID = $id");
printf("length in DB: %d\n", $pdoStmt->fetchColumn());
$pdoStmt = $pdo->query("select * from $lobTestTablename where TL_ID = $id");
/* @var $pdoStmt PDOStatement */
$row = $pdoStmt->fetch(PDO::FETCH_ASSOC);
var_dump($row['TL_CLOB']);
$dataRead = stream_get_contents($row['TL_CLOB']);
printf("stream eof? %s\n", var_export(feof($row['TL_CLOB']), true));
printf("read back in: strlen: %d, mb_strlen: %d\n", strlen($dataRead), mb_strlen($dataRead));
printf("values equal: %s\n", var_export($clobData === $dataRead, true));
|