2011-09-01 31 views
1

我正在使用PHP的db2_prepare和db2_execute以下查詢(架構名稱已更改爲保護無辜者):db2_execute回報「描述帕拉姆失敗」和「綁定錯誤」

WITH U AS (
      SELECT * 
      FROM FOO.USR 
      WHERE USR_ID = ? 
     ), UC AS (
      SELECT UC.* 
      FROM FOO.USR_CNTRCT UC 
       JOIN U ON U.USR_ID = UC.USR_ID 
     ) , LC AS (
      SELECT DISTINCT CNTRCT_ID 
      FROM FOO.CNTRCT_LOC CL 
       JOIN FOO.USR_LOC UL ON UL.SLS_CTR_CD = CL.SLS_CTR_CD 
       JOIN U ON U.USR_ID = UL.USR_ID 
      WHERE CL.SLS_CTR_CD IN (?,?,?,?) 
     ) 
    SELECT C.*, COALESCE(P.PGM_NM, CAST('' AS CHAR(80) CCSID 37)) AS PGM_NM, 
     COALESCE(ADT.ACTN_TM, TIMESTAMP('2000001', '00.00.00')) AS TIME_ORDER 
    FROM U, FOO.CNTRCT AS C 
     LEFT JOIN FOO.CNTRCT_PGM CP ON CP.CNTRCT_ID = C.CNTRCT_ID 
     LEFT JOIN FOO.PGM P ON P.PGM_ID = CP.PGM_ID 
     LEFT JOIN UC ON UC.CNTRCT_ID = C.CNTRCT_ID 
     LEFT JOIN (
      SELECT ENTY_ID AS CNTRCT_ID, MAX(ACTN_TM) AS ACTN_TM 
      FROM FOO.ADT A JOIN U ON U.USR_ID = A.USR_ID 
      WHERE ENTY_TP = 'CT' 
      GROUP BY ENTY_ID 
     ) AS ADT ON ADT.CNTRCT_ID = C.CNTRCT_ID 
    WHERE C.APP = ? 
      AND (
       ((SELECT COUNT(*) FROM UC) > 0 AND UC.CNTRCT_ID IS NOT NULL) 
       OR 
       ((SELECT COUNT(*) FROM UC) = 0 AND UC.CNTRCT_ID IS NULL) 
      ) 
      AND ? BETWEEN YEAR(STRT_DT) AND YEAR(END_DT) 
      AND (LOWER(CNTRCT_NM) LIKE ?) 
    ORDER BY CNTRCT_NM ASC 

我已確認我的參數在數量和順序上都是正確的。當我執行這個查詢時,php返回兩個錯誤:描述參數失敗綁定錯誤

我把問題縮小到這一行:CL.SLS_CTR_CD IN (?,?,?,?)。如果我在這裏使用實際值而不是參數,查詢運行良好。

環境是用於IBM i,PHP 5.3,DB2(在i)V6R1上的Zend Server。我從作業日誌(QEZJOBLOG)得到的唯一幫助是SQL0313(主機變量的數量無效)。

再次,我已確認我提供了正確數量的變量。 描述參數失敗錯誤讓我懷疑PHP是否在努力確定這四個參數的類型。它們應該是string(2),並且傳遞給db2_execute的參數數組的var_dump確認它們已經被轉換。

我將切換到使用值而不是參數爲特定的行,但它會讓我瘋狂,直到我弄清楚發生了什麼事情。

感謝

乍得

+0

你總是傳遞四個值嗎?你能發佈運行該語句的代碼嗎? –

回答

1

我曾與db2_prepare和db2_execute蒙山在複雜的查詢綁定PARAMS與此PTF的水平的幾個問題:

SF99601 15 DB2 FOR IBM i 
SF99354 8 TCP/IP GROUP PTF 
SF99115 14 IBM HTTP SERVER FOR i 

升級到各級

20 DB2 
11 TCP/IP 
20 IBM HTTP 

這個問題消失了,我又回到了一個可疑的瘋狂樂vel :)

+0

優秀信息!我會檢查我的操作人員,看看我們是否可以應用ptfs。 –

+0

操作在週末放下了一些PTF,並且我瞧,我的參數化查詢現在可以正常工作。再次感謝! –

+0

很高興聽到它:) – corretge