SELECT * from authors where name = @name_param
gibi bir soruyum varsa, parametre adlarını (özellikle "name_param") ayrıştırmak için bir düzenli ifade var mı?SQL parametrelerini ayrıştırma için düzenli ifade
Teşekkür
SELECT * from authors where name = @name_param
gibi bir soruyum varsa, parametre adlarını (özellikle "name_param") ayrıştırmak için bir düzenli ifade var mı?SQL parametrelerini ayrıştırma için düzenli ifade
Teşekkür
parametreler de tırnaklı dizge içinde oluşabilir, çünkü bu zordur.
SELECT * FROM authors WHERE name = @name_param
AND string = 'don\'t use @name_param';
Nasıl düzenli ifade ilk @name_param
ancak ikinci kullanmayı bilecek?
Bu, çözülebilecek bir sorundur, ancak tek bir normal ifadede bunu yapmak pratik değildir. Bunu Zend_Db'de işlemek zorunda kaldım ve yaptığım şey önce tüm alıntılanmış dizeleri ve sınırlanmış tanımlayıcıları çıkardı ve sonra geri kalanında normal ifadeler kullanabilirsiniz.
Burada kodunu görebilirsiniz: http://framework.zend.com/code/browse/~raw,r=8064/Zend_Framework/trunk/library/Zend/Db/Statement.php
bakın fonksiyonlarını _stripQuoted()
ve _parseParameters()
.
SQL yorumlarında görünen parametre adlarından bahsetmiyoruz. Normal ifadeler harikadır, ancak ayrıştırma işleri için mutlaka büyük değildir. –
Evet, SQL yorumları hakkında iyi bir nokta. –
sen onları özelliklere uygun tırnakla veya yorumlarınız göz önüne alındığında, gerekli regex oldukça önemsiz olacaktır:
@([_a-zA-Z]+) /* match group 1 contains the name only */
Ben naif bir yaklaşım onun tuzaklar var olduğunu bilerek, tedbirli olmak Bill Karwin's recommendation ile gitmek. Ama uğraştığın verileri kesiyorsan, bu regex ihtiyacınız olan her şey olurdu.
Tam olarak ne sorduğundan emin değilsiniz. Açıklığa kavuşabilir mi, örnek verebilir misiniz? Bir isimler listesinden geçmek ve WHERE ismini (name_a, name_b, ...) olarak çevirmek mi istiyorsunuz? ve RDBMS'yi belirtmeniz gerekiyor, Regex desteği bunların arasında farklı. –