SQL serverda asla o sekilde komutlar kullanma derim (en onemli 10 programlama hatalari listesinde yer aliyor).
Visual Fox Pro
1
2
3
| CariKod = 'AHMET%'
SQLExec(m.lnHandle,;
'SELECT Cari_kod,Cari_unvan1,cari_unvan2 FROM CARI_HESAPLAR where Cari_KOD like ?m.CariKod','liste') |
Burada en onemli fark sen degeri dogrudan yaziyorsun. Gercek hayatta orada dogrudan kodunda olmayacagina gore herhalde:
Visual Fox Pro
1
| [SELECT Cari_kod,Cari_unvan1,cari_unvan2 FROM CARI_HESAPLAR where Cari_KOD like ']+m.CariKod+['] |
gibi birsey yapiyorsun. Eger oyleyse iste onu kesinlikle yapma. Neden yapma dersen "SQL Injection Attack" adiyla taniniyor. Yabancilarin istedigi gibi senin database'ine giris yolu.
Neden = 'AHMET' olunca birebir uyanlar geliyor. == ile de olmadi kismina gelince:
== sadece VFP'ye ozel. O olmasaydi SQL server'daki gibi calismasi icin:
SET ANSI ON
gerekirdi. SQL Server ANSI uyumlu, VFP degil temel olarak. VFP de de SET ANSI ON ile bakarsan = 'AHMET' sadece icinde AHMET olanlari getirir.
Bir de nacizane string ayrac olarak [ ] kullanma derim. Neden dersen, tek ve cift tirnagin aksine, icindekiler derlenme sirasinda degerlendiriliyor ve kazara bir #define sabiti var ise o kullaniliyor. Olmaz olmaz ama olursa da insana kafayi yedirecek, bulmasi cok zor hatalara yol acar. Ornegin:
Visual Fox Pro
1
2
3
| #define cari_hesaplar 15
? 'SELECT Cari_kod,Cari_unvan1,cari_unvan2 FROM CARI_HESAPLAR where Cari_KOD like ?m.CariKod'
? [SELECT Cari_kod,Cari_unvan1,cari_unvan2 FROM CARI_HESAPLAR where Cari_KOD like ?m.CariKod] |
Yen yaz 1907'ye yolla FB gelsin evinde yensin.
(sonra salaklar ciksin alin terine şike desin)