Nasıl bir düzenli ifade kullanarak bir MySQL sorgusu ile kayıtları döndürebilir?

1 Cevap php

Ben kullanıcı girişi ile arandı, ve başlangıçta, bu doğru kayıtları bulmak için yeterli olan benim veritabanında kayıtları var.

"SELECT id FROM plants WHERE Flower LIKE '%" . $sanitizedUserInput . "%'"

Bu, tüm iyi ve iyi çalışıyordu, ama sonra işler 'kırmızı' arıyor kendi Flower alanında sırayla karakterleri 'kırmızı' ile bitkiler başlamıştı, ve basitçe tüm sözcük, 'kırmızı gibi olmaya başladı '.

Ben sadece bir boşluk kullanıcının giriş iki tarafında koymak önerdi, ama ben kelime alanında ilk kelime, ya da son nerede bu başarısız biliyorum edildi. Ben normal bir ifade kullanmak gerekir, kendi kendime düşündüm! Bu iki tarafında sınır bir söz var sözcüğü aramak için.

Ne yazık ki, ben önce bir veritabanında regexs hiç kullanmadım. Nasıl bir regex ile bir db aramak için bir sorgu oluşturmak mı? Umarım, bu kadar kolay:

"SELECT id FROM plants WHERE Flower REGEX `/\b" . $sanitizedUserInput . " \b/`"

1 Cevap

Evet, oldukça fazla olduğunu kolay.

MySQL Reference Manual - Regular Expressions

MySQL Düzenli ifadelerde kelime sınır dizileri [[:<:]] ve [[:>:]] böylece gibi bir şey ile sonuna kadar gidiyoruz:

$query = "SELECT id ".
            "FROM plants ".
            "WHERE Flower REGEXP '[[:<:]]".$sanitizedUserInput."[[:>:]]'";