赏金更新:马克已经得到了非常好的答案.改编为:进入:,在下面.不过,除了DBIx,我还在寻找类似的方案.我只想兼容任何东西.
我需要关于在参数化sql语句中为“扩展”占位符选择的语法提供建议.因为构建一些构造(IN子句)会阻碍我,所以我决定了一些自动扩展成普通的语法快捷方式?占位符.
我喜欢他们.但是我想把它打包出来,要问自己是否容易理解.
基本上我的新占位符是?和:? (枚举参数)和:&和:和:|和::(用于命名占位符)具有以下用例:
-> db(" SELECT * FROM all WHERE id IN (??) ",[$a,$b,$c,$d,$e])
的??根据我的db()func的$args的数量扩展为?,?,….这一个很清楚,它的语法已经被标准化了. Perls DBIx :: Simple也使用它.所以我很确定这是一个可以接受的想法.
-> db(" SELECT :? FROM any WHERE id>0 ",["title","frog","id"]);
// Note: not actually parameterized attr,needs cleanup regex
承认它我只是喜欢笑脸.基本上这个:占位符将一个关联的$args扩展为纯列名.事实上,它抛出任何$args值.对于INSERT与??结合使用,有时候对于IN子句是非常有用的.但是在这里我已经想知道这个新语法是否合理,或者不仅仅是一个俗名,因为它混合在一起?字符.但不知何故似乎匹配的语法方案很好.
-> db(" UPDATE some SET :,WHERE :& AND (:|) ",$row,$keys,$or);
这里的助记符:扩展为name =:名称对的列表,用逗号分隔.而&是由ANDs加入的column =:列列表.为了平价,我补充说:|. :&但是在UPDATE命令中还有其他用例.
但是我的问题不在于有用性,而是:和:&似乎是可以记住的?
-> db(" SELECT * FROM all WHERE name IN (::) ",$assoc);
有些虽然我也添加::内插一个:named,:value,:list非常像??扩展到?,?类似的用例,并且具有统一性.
无论如何,有没有人实行这样的计划?不同的占位符?或者你会推荐简单吗?更新:我知道PHP Oracle OCI接口也可以绑定数组参数,但不使用特定的占位符.我正在寻找类似的占位符语法.