Bounty update: Zaten Mark çok iyi bir cevap aldım. Uyarlama: = içine: aşağıda. Ancak, ben yine DBIx dışında benzer programları arıyorum. I anything uyumlu olmak sadece ilgileniyorum.
I need advise on the syntax I've picked for "extended" placeholders in parameterized SQL statements. Because building some constructs (IN clauses) was bugging me, I decided on a few syntax shortcuts that automatically expand into ordinary ? placeholders.
I like them. But I want to package it up for distribution, and am asking myself if they are easily understandable.
Temel olarak yeni tutucular ?? ve :? (numaralandırılmış params) ve :& ve :, ve :| ve {vardır [(5)]} (adında tutucuları için) kullanım durumları aşağıdaki ile:
-> db(" SELECT * FROM all WHERE id IN (??) ", [$a, $b, $c, $d, $e])
?? ?,?,?,?,?,... benim db () işlev için $ args sayısına bağlı olarak genişler. Bu oldukça açıktır, ve sözdizimi zaten tür standardize. Perls DBIx :: Basit çok kullanır. Yani bu kabul edilebilir bir fikir oldukça eminim.
-> db(" SELECT :? FROM any WHERE id>0 ", ["title", "frog", "id"]);
// Note: not actually parameterized attr, needs cleanup regex
İtiraf. Ben sadece gülen sevdim. Temelde bu :? tutucu düz sütun adları içine bir ilişkisel $ args genişler. Aslında herhangi bir $ args değerlerini atıyor. Bu birlikte ınsert'ler için gerçekten yararlıdır? Ve bazen için hükümler IN. Ama burada ben zaten karışımları çünkü bu yeni sözdizimi sadece bir yanlış isim mantıklı, ya da olup olmadığını merak ediyorum: ve? karakter. Ama her nasılsa iyi sözdizimi düzenine uyacak gibi görünüyor.
-> db(" UPDATE some SET :, WHERE :& AND (:|) ", $row, $keys, $or);
Here the mnemonic :, expands into a list of name=:name pairs separated by , commas. Whereas the :& is a column=:column list joined by ANDs. For parity I've added :|. The :& has other use cases out of UPDATE commands, though.
But my question is not about the usefulness, but if :, and :& appear to be rememberable?
-> db(" SELECT * FROM all WHERE name IN (::) ", $assoc);
Bazı sonra ben de :: katmak için eklenmiş olsa :named,:value,:list çok ?? genişler gibi ?,?,?. Benzer kullanım durumları ve yeknesaklığı için olması mantıklı.
Neyse, başkası böyle bir planı uygulamaya konmuştur? Farklı tutucuları? Yoksa hangi basitlik için tavsiye ederim? Update: Ben PHP Oracle OCI arayüzü de dizi parametreleri bağlamak olduğunu biliyorum, ama bunun için özel tutucular kullanmak değildir. Ve ben karşılaştırılabilir tutucu sözdizimlerinden arıyorum.