Bu mysql aranabilir o kadar nasıl bir kesme işareti kodlamak mı?

3 Cevap php

Bunu en net soru olduğunu sanmıyorum, ama bir örnek biraz daha net yapmak gerekir.

Ben kesme içerir bazıları film isimleri ile dolu bir tablo var. Ben filmleri bulmak için kullanılan bir arama kutusu var.

Ben üzerinden arama yaptığınızda

mov_title = '$search_keywords'

tüm eserlerini, ancak bu yöntem kısmi aramalar için herhangi bir sonuç vermez, bu yüzden bu kullanmak zorunda

mov_title LIKE '%$search_keywords%'

Bu yöntem, A-Za-z0-9 başlıkların için çalışıyor, ama bir başlık kesme işareti varsa, ben tam bir maç yapsalar bile, film bulmak mümkün değil.

Başlıkları DB depolanan önce, ben bu soktular:

$search_keywords = htmlspecialchars(mysql_escape_string($_GET["search_keywords"]));

Yani DB, her kesme işareti öncesinde bir eğik var.

Bir kesme işareti ile bir film başlığı maç için tek yolu fiziksel arama kutusuna, kesme işareti önünde bir eğik koymaktır.

Bu çok önemsiz görünüyor, ve ben çözüm acı açıktır eminim, ama ben sadece bunu göremiyorum.

3 Cevap

mysql_real_escape_string() kullanın ve kullanmayın htmlspecialchars(). İkincisi HTML üretimi için var, veritabanı kaçmak için değil.

Eğer çıkış yapmadan önce html çıkışı için verileri kaçtı çünkü bu sadece olur! Sadece, yani right çıkışını yapmadan önce bunu yapmanız gerekir:

<li><?php echo htmlspecialchars($some_var); ?></li>

Veritabanındaki değerleri Unescape ve sadece çıkış kaçmayı uygulamasını değiştirebilirsiniz. Sen şu anda da $ SEARCH_STRING üzerine htmlspecialchars(mysql_real_escape_string()) yaptığını başka bir yol var.

Bu veritabanına ekleme zaten HTML kaçmak için mantıklı bile, mysql_real_escape_string() dış işlev değil iç fonksiyonu olacaktır.

Eğer sağlam veritabanı tutmayı tercih ederseniz, sadece sorgu oluşturarak önce aradığınız herhangi bir arama kelimeleri htmlspecialchars () işlevi çalıştırabilir. I (() sql injection girişimlerini engellemek için kaçmayı ama mysql_real_escape_string kullanın), aynen olduğu gibi veritabanına verileri koyarak tavsiye rağmen. Eğer tarayıcı verilerini yazdırırken sonra htmlspecialchars () kullanın.