ID: 40787
Updated by: jani@php.net
Reported By: jarismar at adplabs dot com dot br
-Status: Assigned
+Status: Feedback
Bug Type: PDO related
PHP Version: 5.2.1
Assigned To: wez
New Comment:
Please try using this CVS snapshot:
http://snaps.php.net/php5.2-latest.tar.gz
For Windows:
http://windows.php.net/snapshots/
Previous Comments:
------------------------------------------------------------------------
[2009-01-09 16:41:59] inbox at trevorbramble dot com
I am experiencing the same error as charles at crh-systems dot com,
however I'm trying to enter a string into a varchar2(4000) column.
I've gone through a lot in the course of diagnosing this problem so I
can't recall exactly what changed, but originally I was getting this
error:
ORA-01460: unimplemented or unreasonable conversion requested
The resolution has been to define the length for that parameter:
$stmt->bindParam( ':notes', $this->notes, PDO::PARAM_STR, 4000 );
Why this fixes the problem is still a mystery. None of the inserted
data is lost, so there don't appear to have really been too many bytes
in the string to insert. I'm not experiencing the same problem with any
of the smaller columns (a string of 4 or more characters will insert
into a column defined varchar2(10), for example).
------------------------------------------------------------------------
[2008-04-01 03:28:49] charles at crh-systems dot com
I am having the same problem,
OCIStmtExecute: ORA-01461: can bind a LONG value only for insert into a
LONG column
I can only get 1333 chars to insert into a clob field no matter which
connection charset I use.
4000 / 3 = 1333.333
...any fixes?
------------------------------------------------------------------------
[2007-03-12 18:27:14] jarismar at adplabs dot com dot br
Many thanks for the faster reply, I've tested with suggested snapshot
PHP Version: 5.2.2-dev
Build Date : Mar 12 2007 16:05:36
But the problem still occurs.
It seems that PDO get wrong data type for the CLOB column.
I can just insert up to 4000 bytes into the CLOB column, because the
extension thinks its handling a LONG column.
------------------------------------------------------------------------
[2007-03-12 17:36:53] jarismar at adplabs dot com dot br
Description:
------------
I'm using pdo_oci and oracle 10g (10.2).
Trying to insert into a CLOB column using multi-byte charset (AL32UTF8)
results on the following error:
ORA-01461: can bind a LONG value only for insert into a LONG column.
The column datatype in not LONG it's a CLOB !
Changing the connection charset to use WE8ISO8859P1 or any other single
byte charset solve the problem (the insert command ends with no error),
but I loose all non ISO characters (my data gets corrupted).
Reproduce code:
---------------
try {
$sDSN = "oci:dbname=$sConId;charset=AL32UTF8";
$oPDO = new PDO($sDSN, $sUserName, $sPassword);
$oPDO->beginTransaction();
$oStmt = $oPDO->prepare("insert into test_clob (id, data) values
(:id, EMPTY_CLOB())");
$iID = 1;
$oStmt->bindParam(':id', $iID);
if ($oStmt->execute()) {
$oStmt = $oPDO->prepare("update test_clob set data=:value where
id=1");
$sData = str_repeat('x', 65535);
$oStmt->bindParam(':value', $sData);
if ($oStmt->execute() === false) {
throw new Exception('Error on update clob');
}
} else {
throw new Exception('Error on insert EMPTY_CLOB');
}
$oStmt = $oPDO->prepare("select data from test_clob where id =
:id");
$oStmt->bindParam('id', $iID);
$oStmt->execute();
$oResult = $oStmt->fetch();
echo 'Read '.strlen(stream_get_contents($oResult['DATA'])).'
characters <br>';
$oPDO->commit();
} catch (Exception $oE) {
if ($oStmt) {
echo '<pre>';print_r($oStmt->errorInfo());echo
"</pre><br>\n";
}
echo $oE->getMessage()."<br>\n";
}
$oPDO = null;
Expected result:
----------------
Read 65535 characters
Actual result:
--------------
Array
(
[0] => HY000
[1] => 1461
[2] => OCIStmtExecute: ORA-01461: can bind a LONG value only for
insert into a LONG column
(ext\pdo_oci\oci_statement.c:142)
)
Error on update clob
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=40787&edit=1