2016-02-24 69 views
1

我剛剛跑進有趣的問題。我需要在參數數組中指定一個變量,但將其綁定到SQL查詢中的每個事件,我已經使用此屬性實現了這一點:$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);。但是,當我使用它,在它LIMIT另一個查詢不工作,因爲我需要指定$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);得到它工作正常(PDO這樣處理它作爲INT,不串)。我還試圖用結合bindValue功能與PDO :: PARAM_INT但仍然不處理限值爲INT。PDO :: ATTR_EMULATE_PREPARES(多種綁定和限制)

+0

請出示的你想要達到的一個樣本。應該有完全沒有必要不同的仿真設置之間進行切換,仿真應始終處於關閉狀態,除非絕對不可避免。這只是意味着你需要制定你的查詢中,沒有模擬/可與任何一種形式的一種方式。你只是擊中邊的情況下出現,並沒有看到究竟是什麼很難幫助你。 – deceze

回答

0

但是當我使用這一點,在它LIMIT另一個查詢不起作用

您可以即時更改仿真模式,在需要時打開或關閉仿真模式。

我也嘗試將bindValue函數與PDO :: PARAM_INT結合使用,但仍然不處理LIMIT值作爲INT。

確保您確實將值轉換爲明確的int值,如PDO doesn't cast them for PDO::PARAM_INT

0
array (size=5) 
    ':audit_id' => string '1' (length=1) 
    ':audit_id1' => string '1' (length=1) 
    ':audit_id2' => string '1' (length=1) 
    ':audit_id3' => string '1' (length=1) 
    ':audit_id4' => string '1' (length=1) 

db_query:

SELECT TYP,OSOBA,o.JMENO FROM ((SELECT 'd.auditor_prihlasen' AS TYP, prihlasena_osoba_id AS osoba FROM dotaznik d WHERE audit_id = :audit_id AND prihlasena_osoba_id > 0) UNION (SELECT 'd.auditor_vyroba' AS TYP, auditor_vyroba_id AS osoba FROM dotaznik d WHERE audit_id = :audit_id1 AND auditor_vyroba_id > 0) UNION (SELECT 'd.auditor_kvalita' AS TYP, auditor_kvalita_id AS osoba FROM dotaznik d WHERE audit_id = :audit_id2 AND auditor_kvalita_id > 0) UNION (SELECT 'od.odpovedna_osoba' AS TYP, odpovedna_osoba_id AS osoba FROM odpoved od WHERE tema_id IN(SELECT id FROM tema WHERE audit_id = :audit_id3)) UNION (SELECT 'od.odpovedna_osoba' AS TYP, odpovedna_osoba_id_puvodni AS osoba FROM odpoved od WHERE tema_id IN(SELECT id FROM tema WHERE audit_id = :audit_id4) AND odpovedna_osoba_id_puvodni > 0)) tbls, osoba o WHERE o.id = osoba GROUP BY typ, osoba, jmeno 

我想查詢到無audit_id1運行,audit_id2等。所以他們都將只使用一個變量audit_id

+1

請**更新您的問題**的新信息,不發佈它的答案。 – deceze