Thread overview
SQL sorgu ifadesi tırnak karakterlerini işleyemiyor
Sep 25, 2017
erdem
Sep 25, 2017
erdem
Sep 25, 2017
erdem
September 25, 2017

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.php

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 25, 2017

Bunu denemiştim ancak bu sefer de şu şekilde bir hata alıyorum:

'MySQL error: Unknown column 'deneme' in 'field list''

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 25, 2017

Ş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

Alıntı:

>

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 ;-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 25, 2017

Bu gibi durumlarda en iyisi ters tek tırnaklar kullanmak:

   `merhaba "dünya"`

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]