2016-02-24 34 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