0

誰かが私を助けてくれないかと思っていました。次のコードは、type = bus のすべてのユーザーを生成しますが、承認済み = 1 のみを生成しません。誰かが私の間違いを指摘できれば幸いです。検索クエリは、誰かがフォームを介してテキスト ボックスに単語を入力することによってトリガーされます。この部分は正常に機能し、そこのプロファイルに検索単語を持つユーザーのみが表示され、type=bus で承認済み = 1 のユーザーのみが表示され、効果がないように見えます。返品はすべて承認されました。誰かが助けてくれることを本当に願っています。

$query = "select * from users where type='bus' and approved=1 and
name like \"%$trimmed%\"  
or profile_words like \"%$trimmed%\"  
or full_name like \"%$trimmed%\"  
or tag_line like \"%$trimmed%\"  
or referral like \"%$trimmed%\"  
or profession like \"%$trimmed%\"  
order by full_name";
4

4 に答える 4

1

このようにあなたの状態をグループ化し、

$query = "
select *
from users 
where  type='bus' and 
       approved = 1 and
          (
             name like \"%$trimmed%\" or 
             profile_words like \"%$trimmed%\"  or 
             full_name like \"%$trimmed%\"   or 
             tag_line like \"%$trimmed%\"  or 
             referral like \"%$trimmed%\" or 
             profession like \"%$trimmed%\
          )
order by full_name";

SQL インジェクションを避けるために、PDOまたはMySQLI拡張機能のいずれかを使用してください。

PDOの例、

<?php

$query = "
select *
from users 
where  type='bus' and 
       approved = 1 and
          (
             name like ? or 
             profile_words like ?  or 
             full_name like ?   or 
             tag_line like ?  or 
             referral like ? or 
             profession like ?
          )
order by full_name";

$name = '%' . $trimmed . '%';

$stmt = $dbh->prepare($query);
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $name);
$stmt->bindParam(3, $name);
$stmt->bindParam(4, $name);
$stmt->bindParam(5, $name);
$stmt->bindParam(6, $name);

$stmt->execute();

?>
于 2012-08-24T08:35:54.080 に答える
0

where 演算子を括弧で囲みます。現在、あなたは取得しています

where (type='bus' and approved=1)
or .... [all the other operators]
于 2012-08-24T08:40:28.973 に答える
0
$query = "select * from users where type='bus' and approved=1 and
(name like \"%$trimmed%\"  
or profile_words like \"%$trimmed%\"  
or full_name like \"%$trimmed%\"  
or tag_line like \"%$trimmed%\"  
or referral like \"%$trimmed%\"  
or profession like \"%$trimmed%\")  
order by full_name";

?

于 2012-08-24T08:35:43.770 に答える
0

承認済みの部分は問題ないと思いますが、問題はOR. AND次のようにandORステートメントを区切って括弧を入れてみてください。

$query = "select * from users where type='bus' and approved=1 and
( name like \"%$trimmed%\"  
or profile_words like \"%$trimmed%\"  
or full_name like \"%$trimmed%\"  
or tag_line like \"%$trimmed%\"  
or referral like \"%$trimmed%\"  
or profession like \"%$trimmed%\" )  
order by full_name";
于 2012-08-24T08:37:14.300 に答える