-1

次のコードは、データベース上のテーブルから名前を検索するために機能します。検索に使用されるフィールドは「q」です。これはクエリです

 $sims = mysql_query("SELECT * FROM electors 
WHERE constituency = '$constituency'
 AND ward = '$ward' AND (surname RLIKE '$q') LIMIT 18");

ただし、ユーザーが次のいずれか、またはそれらのいずれかの組み合わせを任意の順序で入力した場合、そのクエリは名前を検索するだけなので機能しません。

タイトル、first_name、initial、surname、suffix、roll no、email、telephone

結果を繰り返さずに、これらのフィールドのいずれかから一致する結果を検索したいと思います。

つまり、たとえばKNIGHTと入力すると、KNIGHTという名前の全員が見つかり、ROBIN KNIGHTと入力すると、ROBINという名前とKNIGHTという名前の人が見つかります。その逆も同様です。

4

2 に答える 2

0
$q = str_replace(" ", "|", $q);

$sims = mysql_query("SELECT DISTINCT * FROM electors 
                     WHERE constituency = '$constituency'
                     AND ward = '$ward' 
                     AND (title RLIKE '$q'
                     OR first_name RLIKE '$q'
                     OR initial RLIKE '$q'
                     OR surname RLIKE '$q'
                     OR suffix RLIKE '$q'
                     OR roll_no RLIKE '$q'
                     OR email RLIKE '$q'
                     OR telephone RLIKE '$q')
                     LIMIT 18");

しかし、実際には mysqli と準備済みステートメントを使用する必要があります。

$stmt = $mysqli->prepare("SELECT DISTINCT * FROM electors 
                         WHERE constituency = ?
                         AND ward = ?
                         AND (title RLIKE ?
                         OR first_name RLIKE ?
                         OR initial RLIKE ?
                         OR surname RLIKE ?
                         OR suffix RLIKE ?
                         OR roll_no RLIKE ?
                         OR email RLIKE ?
                         OR telephone RLIKE ?)
                         LIMIT 18");
$stmt->bind_param('ssssssssss', $constituency, $ward, 
                  $q, $q, $q, $q, $q, $q, $q, $q, $q);
$stmt->execute();
于 2012-06-27T09:24:43.580 に答える
0

ORそれらをステートメントに分割するだけです:

$sims = mysql_query("SELECT * 
                     FROM `electors` 
                     WHERE `constituency` = '$constituency' 
                     AND `ward` = '$ward' 
                     AND (`title` RLIKE '$q' 
                         OR `first_name` RLIKE '$q' 
                         OR `initial` RLIKE '$q' 
                         OR `surname` RLIKE '$q' 
                         OR `suffix` RLIKE '$q' 
                         OR `roll_no` RLIKE '$q' 
                         OR `email` RLIKE '$q' 
                         OR `telephone` RLIKE '$q') 
                     LIMIT 18");

最も効率的なクエリではありませんが、仕事は完了します。

$qまた、そのクエリを実行する前に必ずクリーニングしてください。SQL インジェクションは大きな問題です。

于 2012-06-27T09:10:45.847 に答える