2011-07-19 40 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

感謝凱文。你的原始建議是正確的。我已經發布了基於你的提示的答案。太感謝了! –