2011-07-19 37 views
0

这是问题:我在表中的(BLOB)字段中存储了一个巨大的xml数据字符串。它有时包含一些字符串70k或更多。我使用ODBC_Connection将其拉出。如果超过32,000个字符,ODBC SQL更新声明问题

我可以导入(没问题)。
我可以操纵XML并将其保存为字符串(没问题)。
我可以将字符串保存回mySQL字段(没问题)。

问题出现时,我试图将其保存回原来的领域,我把它从它。如果我保存的字符串少于32,000个字符,我们就是金。如果字符串中有多个字符,BAM。我收到此错误消息。

(!) Warning: odbc_exec() [function.odbc-exec]: SQL error: [DataDirect][ODBC InterBase 
driver][InterBase]Dynamic SQL Error, SQL error code = -104, token size exceeds limit, 
SQL state 37000 in SQLExecDirect in ...\Test\index4.php on line 129 Call Stack 

# Time Memory Function Location 
1 0.0011 482872 {main}() ..\index4.php:0 
2 0.1260 1033760 odbc_exec () ..\index4.php:129 

这里是PHP代码我使用以防万一:

// Now save it back to the system 
$conn=odbc_connect($DBNAME_O,$DBUSER_O,$DBPW_O); 
if (!$conn) 
{exit("Connection Failed: " . $conn);} 
echo $tempFileXML; 
$sql="UPDATE EHR_VISITS SET RECORD='$tempFileXML' WHERE EHR_VISITS_ID='1396'"; 
// echo $theData; 
$rs=odbc_exec($conn,$sql); 
odbc_close($conn); 

感谢您的帮助......

UPDATE:这是连接到interbase的数据库,而不是MS SQL 。另外,我尝试使用不同的ODBC驱动程序,并得到了相同的消息,但具有略高字符公差:42000,而不是37000

请帮助....

回答

1

你试过传递数据作为一个参数?

E.g:

$sql = UPDATE EHR_VISITS SET RECORD=? WHERE EHR_VISITS_ID='1396'; 
$stmt = odbc_prepare($conn, $sql); 
$rs = odbc_execute($stmt, $tempFileXML); 
+0

我有同样的结果尝试这一点。非常感谢您的帮助。我已经发布了一些我已经尝试过的其他信息。我仍然卡住。 –

+0

你还试过使用PHP的ibase扩展吗?请参阅:http://www.php.net/manual/en/book.ibase.php –

+0

感谢凯文。你的原始建议是正确的。我已经发布了基于你的提示的答案。太感谢了! –