Nasıl sadece tek tırnak eğik ekleme ve çift tırnak görmezden hakkında gitmeli?

5 Cevap php

How should I go about adding slashes to only single quotes and ignoring double quotes? I am using php. I would only like to escape single quotes to prevent my php mysql queries from breaking.

Teşekkür ederiz!

Edit: I am thinking a regular expression search and replace will be the most helpful.

5 Cevap

Peki, preg_replace_all("/([^\])'/","$1\'",$yourStrHere) sen soruyorsun ne yapacak:

  • "/ ([^ \]) ​​'/" Verir regex / ([^ \])' tek bir teklifle ardından bir ters eğik değil herhangi bir tek karakter üzerinde "maç diyor, ve teklif önce karakteri yakalamak /,. "
  • "$ 1 \ '" "bir ters eğik çizgi izledi yakalanan karakter ve tek bir alıntı ile değiştirin" diyor

AMA ...

Parametrelenmişse mysqli kullanarak sorguları veya PDO API'leri hakkında Bill'in cevabı, gerçekten çok iyi bir tavsiyedir. Bu veritabanı API kendiniz yapmak daha bu halledeyim daha kolay ve daha etkili - bu API'leri yazdı insanların (ve bu API'ler için yerli backendleri çalıştı kişi) muhtemelen hitap güvenlik içine daha fazla zaman ve çaba koymak ve var çoğumuz daha performans sorunları kendimizi geçirmek için umut olabilir.

Tamam gerçekten geç bu mesaja değilim ama bu soruya iniş birisi yardımcı olabilir umuduyla bu cevabı ekledi. Weston C @ regex çözüm vermiş olsa da, bu-addcslashes (http://php.net/manual/en/function.addcslashes.php) yapmak için bir php fonksiyonu vardır:

string addcslashes ( string $str , string $charlist )
Returns a string with backslashes before characters that are listed in charlist parameter.

Basit bir str_replace("'", "\\'", $string) çalışmalıdır. Bamya yukarıda belirtildiği gibi MySQL sorguları kaçmaya çalışıyoruz ama eğer kütüphane işlevleri kullanmanız gerekir.

Dinamik değerleri için sorgu parametreleri kullanırsanız, herhangi bir hiç kaçan yapmanız gerekmez.

Sen mysqli uzantısı veya PDO uzantısı (I PDO'yu tercih) sorgu parametreleri kullanabilirsiniz. Eski mysql uzatma sorgu parametreleri desteklemiyor.