mario

10

php

sql

赏金更新:马克已经得到了很好的答案.改编:=进入:,下面.但是,除了DBIx之外,我还在寻找类似的方案.我只对与任何东西兼容感兴趣.

我需要建议我在参数化SQL语句中为"扩展"占位符选择的语法.因为构建一些构造(IN子句)让我烦恼,我决定使用一些自动扩展为普通的语法快捷方式?占位符.

我喜欢他们.但我想打包它以便分发,并且问我自己是否容易理解.

基本上我的新占位符是??和:?(枚举参数)和:&和:,(:|以及::(对于命名占位符)具有以下用例:

-> db(" SELECT * FROM all WHERE id IN (??) ", [$a, $b, $c, $d, $e])

该??扩展到?,?,?,?,?,...依赖于的$ args数到我的分贝()FUNC.这个很清楚,它的语法已经标准化了.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=:name为由,逗号分隔的对列表.尽管:&是列=:通过联接的列清单AND秒.为了平价我已经添加了:|.但是:&UPDATE命令中有其他用例.

但我的问题不是关于有用性,而是如果:和:和似乎是可记忆的?

-> db(" SELECT * FROM all WHERE name IN (::) ", $assoc);

虽然我也添加::了插值:named,:value,:list非常像??扩展到?,?,?.类似的用例,对于统一性是明智的.

无论如何,有没有其他人实施这样的计划?不同的占位符?或者你会推荐哪些简单?更新:我知道PHP Oracle OCI接口也可以绑定数组参数,但不使用特定的占位符.我正在寻找类似的占位符语法.