MySQL belgelerine olması gerektiğini söylüyor \'
. Ancak, hem scite hem de mysql bunun ''
işe yaradığını gösterir . Bunu gördüm ve işe yarıyor. Ne yapmalıyım?
\'
''
yanılmıyorsam
MySQL belgelerine olması gerektiğini söylüyor \'
. Ancak, hem scite hem de mysql bunun ''
işe yaradığını gösterir . Bunu gördüm ve işe yarıyor. Ne yapmalıyım?
\'
''
yanılmıyorsam
Yanıtlar:
Alıntı yaptığınız MySQL belgeleri aslında bahsettiğinizden biraz daha fazlasını söylüyor. Ayrıca diyor ki,
“
'
” İle alıntılanan bir dizenin içindeki “'
” “ ” olarak yazılabilir''
.
(Ayrıca, Tablo 8.1'in MySQL 5.0 sürümüne bağladınız. Özel Karakter Kaçış Dizileri ve geçerli sürüm 5.6 - ancak geçerli Tablo 8.1. Özel Karakter Kaçış Dizileri oldukça benzer görünüyor.)
Bence parametre üzerindeki Postgres notubackslash_quote (string)
bilgilendirici:
Bu, bir tırnak işaretinin
\'
bir dize değişmeziyle temsil edilip edilemeyeceğini denetler . Bir alıntı işaretini temsil etmenin tercih edilen SQL standardı yolu, iki katına çıkmasıdır (''
), ancak PostgreSQL de tarihsel olarak kabul etmiştir\'
. Ancak,\'
güvenlik riskleri yaratır ...
Bana göre, iki katına çıkarılan tek tırnaklı karakter kullanmanın, tek tırnaktan kaçmak için ters eğik çizgi kullanmaktan daha iyi bir genel ve uzun vadeli seçim olduğunu söyleyebilirim.
Şimdi, dil seçimi, SQL veritabanı seçimi ve standart dışı tuhaflıklar ve denkleme sorgu çerçevesi seçimi eklemek istiyorsanız, farklı bir seçim yapabilirsiniz. Kısıtlamalarınız hakkında fazla bilgi vermiyorsunuz.
Standart SQL, ikiye katlanmış alıntılar kullanır; MySQL bunu makul bir şekilde uyumlu kabul etmelidir.
'He said, "Don''t!"'
'
” ile alıntı dize içinde “ '
” “olarak yazılabilir ''
” . “ "
” İle alıntılanan bir dizenin içindeki “ "
” “ ” olarak yazılabilir ""
. Tırnak karakterinden önce bir kaçış karakteri (“` `”) koyun.
Kullanıcı2087510'un ne demek istediğine inanıyorum
name = 'something'
name = name.replace("'", "\\'")
Bunu da başarıyla kullandım.
İşte bir örnek:
SELECT * FROM pubs WHERE name LIKE "%John's%"
Sadece tek tırnak içine çift tırnak kullanın.
Tek tırnak işareti kullanmakta ısrar ediyorsanız (ve karakterden kaçmanız gerekiyorsa):
SELECT * FROM pubs WHERE name LIKE '%John\'s%'
Farkında olmamın üç yolu var. Birincisi çoğu programlama dilinde en güzel ve ikincisi ortak yol:
'I mustn''t sin!'
\
Tek tırnak işaretinden önce kaçış karakterini kullanın '
:'I mustn\'t sin!'
"I mustn't sin!"
\'
pek çok programlama dili tarafından kullanıldığı gibi, ancak ''
daha fazla SQL lehçesi tarafından desteklendiği için, seçenek 1'i kullanmak uyumluluk için daha iyidir. Sqlite, ters eğik çizgi kaçışlarıyla çalışmaz.
Dizeyi değiştirin
value = value.replace(/'/g, "\\'");
Burada değer, Veritabanınızda depolanacak dizenizdir.
Daha ileri,
Bunun için NPM paketi, içine bakabilirsiniz
Kesme işaretiyle herhangi bir veri noktanız varsa kesme işaretinden önce bir kesme işareti ekleyebilirsiniz
Örneğin. 'Burası John adlı kişinin yeri'
Burada MYSQL 'John'un yeri' şeklinde iki cümle olduğunu varsayar.
'Burası John'un yeri' koyabilirsiniz. Bu şekilde çalışması gerektiğini düşünüyorum.
PHP'de mysqli_real_escape_string () 'i bir SQL deyiminde kullanmak için bir dizede özel karakterlerden kaçmayı seviyorum.
bkz. https://www.php.net/manual/en/mysqli.real-escape-string.php
Muhtemelen konu dışı, ama belki de buraya bir HTML formundan metin girişini sterilize etmenin bir yolunu aradınız, böylece bir kullanıcı kesme işareti karakterini girdiğinde, metni bir SQL'e yazmaya çalıştığınızda bir hata atmaz tabanlı bir tablo. Bunu yapmanın birkaç yolu vardır ve SQL enjeksiyonu hakkında da okumak isteyebilirsiniz, ancak PHP'deki basit bir seçenek, tüm apostroph'larınızı muhtemelen depolamak istediğiniz şeye dönüştürecek olan htmlspecialchars () işlevini kullanmaktır. '
neyse.
''
ya\'
doğrudur?