php – SQL的扩展占位符,例如WHERE id IN(??)
赏金更新:马克已经得到了非常好的答案.改编为:进入:,在下面.不过,除了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接口也可以绑定数组参数,但不使用特定的占位符.我正在寻找类似的占位符语法.
您可能希望避免使用:=作为占位符,因为它已经是
has a usage,例如MySQL.
参见例如this answer的现实世界的使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |