Forum: D Programlama Dili RSS
SQL sorgu ifadesi tırnak karakterlerini işleyemiyor
erdem (Moderatör) #1
Üye Tem 2009 tarihinden beri · 1005 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: SQL sorgu ifadesi tırnak karakterlerini işleyemiyor
Basit bir günlüğü vibe.d'ye taşıyabilir miyim diye düşünüyordum.

http://localhost:8888/gönderiler/oluştur

adresinde basit bir form var.  Kullanıcı bir gönderi başlığı ve içeriğini giriyor. Daha sonra bu veritabanına kaydediliyor. Buraya kadar her şey güzel ancak şöyle bir şey farkettim. Eğer kullanıcı eğer içerik alanına içinde tırnak olan bir ifade girerse hata veriyor.

Doğal olarak sorgu ifadesi şuna dönüşüyor:

INSERT INTO gonderiler (kullanici_no, baslik, icerik, created_at, updated_at) VALUES (1, 'Deneme', 'deneme'miz', '2017-09-25 12:29:30', '2017-09-25 12:29:30')

Dikkat ederseniz 3 tane tırnak oldu.

        auto başlık = this.başlık_.replace("'","\'");
        auto içerik = this.içerik_.replace("'","\'");
 
        logInfo("%s %s", başlık, içerik);
        
        auto sqlKomutu = "INSERT INTO gonderiler (kullanici_no, baslik, icerik, created_at, updated_at) VALUES (1, '"
                         ~ başlık ~
                         "', '"
                         ~içerik ~
                         "', '"
                         ~ zaman ~
                         "', '"
                         ~ zaman ~
                         "')";

İlk planda ' karakterlerini \' ile değiştirmeyi düşündüm ama sanırım yukarıdaki çalışmıyor.

Php ve mysql için sanırım şöyle bir işlev varmış.

http://php.net/manual/en/function.mysql-real-escape-string…
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4538 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu gibi durumlarda en iyisi ters tek tırnaklar kullanmak:
    `merhaba "dünya"`
Ali
erdem (Moderatör) #3
Üye Tem 2009 tarihinden beri · 1005 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bunu denemiştim ancak bu sefer de şu şekilde bir hata alıyorum:

MySQL error: Unknown column 'deneme' in 'field list'
erdem (Moderatör) #4
Üye Tem 2009 tarihinden beri · 1005 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Şu şekilde düzeldi:
    auto başlık = this.başlık_.replace("'",`''`);
    auto içerik = this.içerik_.replace("'",`''`);

Ama şimdi daha ilginç bir durum oluştu.

Bu sefer içerik alanına

Şaşı '''' baktığımız'' için ?$%&

gibi bir ifade giriyorum.Bu sefer

core.exception.AssertError@../../.dub/packages/vibe-d-0.8.1/vibe-d/core/vibe/core/log.d(128): Orphan format specifier: %&
??:? _d_assert_msg [0xb5af22]
../../.dub/packages/vibe-d-0.8.1/vibe-d/core/vibe/core/log.d:128 nothrow @safe void vibe.core.log.log!(4, "source/app.d", 52, immutable(char)[]).log(immutable(char)[]) [0x8d0c0a]

şeklinde program göçüyor  ;-)
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-12-16, 10:55:04 (UTC -08:00)