2013-02-01 14 views
6

Bu yüzden, hiç karşılaşmadığım ve sorunu düzeltmeyle ilgili çok fazla bilgi göremediğim ilginç bir sorun var. İçinde muazzam miktarda veriye (10 yıl) sahip olan büyük bir veri tabanım var.Mysql Sorgu sorunlarını LIKE ve kesme işaretlerini kullanarak

Şimdi, arama nesneleri iyi çalışıyor, ancak yakın zamanda birileri sizin için bir 'hata' konusuna dikkatimi çekti. Beklenen sonuçları elde etmek için çekim yapmaya çalıştım, ama boşuna.

birisi arayışında kesme işareti kullanır, dışarı arama hataları Ama hiçbir sonuç döndüren değil:

Bu benim konudur. Örneğin, Pete's arandığında, sorgu yürütülür, ancak hiçbir şey döndürmez. Evet, sorgunun mysql_real_escape_string() olduğundan emin olun, böylece Pete'sPete\'s olur.

phpmysql'in arama özelliğini kullanarak sorgulamayı denediğimde bile, garip sonuçlar elde ederim.

SELECT * FROM `smd_article` WHERE `copy` LIKE '%Pete\'s%' 

Ama phpmyadmin arama özelliğini kullandığınızda, bana verir: Sorgu böyle olması amaçlanmıştır

SELECT * FROM `smd_article` WHERE `copy` LIKE '%Pete''s%' 

Ve aslında sql sekmede sorgu dışarı yazdığınızda, hala sonuç vermiyor. Ama sadece Petes yaptığımda sadece Pete ve bazı 3k kayıtları kullandığımda geri dönen bazı 17K kayıtları var.

Neden yanlış yaptığımı veya LIKE deyimini kullanarak bir sorgunun kesme işlemine izin vermesini sağlamak için eksik yaptığımı merak ediyorum. Düşünceler? mysql_real_escape_string

LIKE '%" . mysql_real_escape_string($find) . "%' 

veya

LIKE '%Pete%27s%' 

veya eğer

tarafından

+5

, ama böyle o joker sorguları sorgulamak için mümkün olan en yavaş yoludur bilerek değer bir veritabanı. Küçük bir masa için uygun olabilirim, ama orta derecede büyük bir masa bile varsa, gerçekten işleri yavaşlatabilir. Uyarılırsınız. – SDC

cevap

5

deneyin Eğer sorun değil çünkü ' tek alıntının olduğunu

$search ='Pete\'s' 
$stmt = $db->prepare("SELECT * FROM `smd_article` WHERE `copy` LIKE ?"); 
$stmt->bindValue(1, "%$search%", PDO::PARAM_STR); 
$stmt->execute(); 
+0

Hiçbir çalışma, hala sonuç yok – MrTechie

+1

, bu veritabanında ne saklanır? Pete 's' ya da Pete'nin değil mi?Eğer 'Pete'in' size izin veriyorsa, '' başka bir deyişle kodunuzu sql enjeksiyonu –

+1

'a devredilemez, hiç bir zaman ham verilere bakmayı bile düşünmemiştim. Ve şimdi sahip olduğum, sorunu görüyorum. Başlık: Pete ' s içeriğinde ve içeriğinde Pete ’ s - eh var. Bu sitenin editörlerinin sadece içeriği kopyalayıp yapıştırdıklarından nefret ediyorum – MrTechie

1

gibi yapın pdo olabilmesidir. Doğru kaçtın. (Phpmyadmin arama fonksiyonu olarak):

dize: Pete'in

MySQL: 'Pete' adlı

Yani aşağıdaki sorgu çalışacaktır.

SELECT * 
FROM `smd_article` 
WHERE copy 
LIKE '%Pete''s%' 

Ayrıca IN deyimi bir göz olabilir (bunu test ettik): konu dışı

SELECT * 
FROM `smd_article` 
WHERE copy 
IN (
'Pete', 'Pete''s' 
) 
+0

ifadesini kullanmıyor – MrTechie

+0

@MrTechie Sorguyu örnek verilerle test ettim ve çalıştı. Alıntıdan kaçmak sorun değil. Farklı bir sorun olmalı – hek2mgl