2014-09-19 86 views
1

PHP版本5.5.12PHP ibase_fetch_assoc():動態SQL錯誤SQL錯誤代碼= -303長SQL

火鳥/的InterBase支持動態 編譯時客戶端庫版本的Firebird API版本25 運行時客戶端庫版本LI-V6.3.2.26539 Firebird 2.5

當我運行長sql時,它以錯誤ibase_fetch_assoc()結束:動態SQL錯誤SQL錯誤代碼= -303算術異常,數值溢出或字符串截斷字符串右截斷

相同的選擇在flamerobin中正確運行。

任何想法在PHP方面有什麼不對?

SELECT COUNT(*) 
FROM EST_ORDERS_ITEMS 
LEFT JOIN EST_ORDERS AS "order" ON EST_ORDERS_ITEMS.ORDER_ID = "order".ORDER_ID 
LEFT JOIN EST_PORTS AS PORT_OF_LOADING ON "order".PORT_OF_LOADING_ID = PORT_OF_LOADING.PORT_ID 
LEFT JOIN EST_PORTS AS PORT_OF_DISCHARGE ON "order".PORT_OF_DISCHARGE_ID = PORT_OF_DISCHARGE.PORT_ID 
LEFT JOIN EST_SUBJECTS AS "delivery" ON EST_ORDERS_ITEMS.DELIVERY_ID = "delivery".SUBJECT_ID 
LEFT JOIN EST_SUBJECTS AS "pickup" ON EST_ORDERS_ITEMS.PICKUP_ID = "pickup".SUBJECT_ID 
LEFT JOIN EST_SUBJECTS AS "shipper" ON EST_ORDERS_ITEMS.SHIPPER_ID = "shipper".SUBJECT_ID 
LEFT JOIN EST_SUBJECTS AS "consignee" ON EST_ORDERS_ITEMS.CONSIGNEE_ID = "consignee".SUBJECT_ID 
LEFT JOIN EST_TAB_AIRPORTS AS AIRPORT_ORIGIN ON "order".AIRPORT_ORIGIN_ID = 
AIRPORT_ORIGIN.AIRPORT_ID 
LEFT JOIN EST_TAB_AIRPORTS AS AIRPORT_DEST ON "order".AIRPORT_DEST_ID = AIRPORT_DEST.AIRPORT_ID 
WHERE (EST_ORDERS_ITEMS.DELETED = 0 AND "order".DELETED = 0) AND (("order".PARTNER_ID IN (
SELECT SOURCE_ID 
FROM EST_SUBJECTS_USERS 
WHERE USER_ID = 1375))) AND (CLIENT_REF CONTAINING ('Fakultní nemocnice Hradec Králové') OR CLIENT_REF_2 CONTAINING ('Fakultní nemocnice Hradec Králové') OR 
CLIENT_REF_3 CONTAINING ('Fakultní nemocnice Hradec Králové') OR HBL CONTAINING ('Fakultní nemocnice Hradec Králové') OR CNTR_NR CONTAINING ('Fakultní nemocnice Hradec Králové') OR JSD CONTAINING ('Fakultní nemocnice Hradec Králové') OR 
"order".NUMBER CONTAINING ('Fakultní nemocnice Hradec Králové') OR PORT_OF_LOADING.NAME CONTAINING ('Fakultní nemocnice Hradec Králové') OR PORT_OF_DISCHARGE.NAME 
CONTAINING ('Fakultní nemocnice Hradec Králové') OR "delivery".NAME CONTAINING ('Fakultní nemocnice Hradec Králové') OR "delivery".IDENT_2 CONTAINING ('Fakultní nemocnice Hradec Králové') OR 
"pickup".NAME CONTAINING ('Fakultní nemocnice Hradec Králové') OR "pickup".IDENT_2 CONTAINING ('Fakultní nemocnice Hradec Králové') OR "shipper".NAME CONTAINING ('Fakultní nemocnice Hradec Králové') OR 
"consignee".NAME CONTAINING ('Fakultní nemocnice Hradec Králové') OR AIRPORT_ORIGIN.IDENT||' - '||AIRPORT_ORIGIN.CITY CONTAINING ('Fakultní nemocnice Hradec Králové') 
OR AIRPORT_DEST.IDENT||' - '||AIRPORT_DEST.CITY CONTAINING ('Fakultní nemocnice Hradec Králové')) 
+1

什麼是連接字符集,以及在WHERE條件中使用的字段的定義(類型+長度)是什麼?您是否嘗試從查詢中刪除元素以找出觸發錯誤的原因? – 2014-09-19 14:03:06

+0

這是該領域的長度。但仍然不明白爲什麼在EMS中它運行正確:( – 2014-09-23 11:22:56

+0

上述查詢是實際查詢還是使用參數?文字通常不會導致此錯誤(因爲使用實際長度),但參數是有限的到聲明的字段長度 – 2014-09-23 14:22:48

回答

2

最近我遇到了同樣的問題。我解決它鑄造搜索字段爲BLOB SUB_TYPE 1

所以更改所有含occurencies像:

CLIENT_REF CONTAINING ('Fakultní nemocnice Hradec Králové')

到:

CAST(CLIENT_REF AS BLOB SUB_TYPE 1) CONTAINING ('Fakultní nemocnice Hradec Králové')

這是因爲有什麼錯PHP的ibase擴展,它只發生在你將搜索文本綁定爲? (問號)參數。當你直接輸入你的SQL時,它就可以工作。

希望有所幫助。

+0

嗯,但我們不能爲此建立索引... – 2015-04-01 14:47:15