1

ユーザーデータベースで検索できるPHPの検索クエリがあります。1 つの特定の ID (w_id) に接続されているユーザーのみが表示されることが重要です。そして、すべてのユーザーが 1 つ持っています。つまり、検索者に属さないクライアントを他の管理者に見られたくないのです。

そのため、すべてのユーザーに w_id を指定しました。私の問題は、クエリがそれを無視しているように見えることです。

これが私のコードです。

   $raw_search_results = mysqli_query($con,"SELECT * FROM customers
   WHERE (`firstname` LIKE '%".$search."%') 
   OR (`lastname` LIKE '%".$search."%')
   OR (`adress` LIKE '%".$search."%')
   OR (`email` LIKE '%".$search."%') AND w_id='$webshop_info[w_id]' limit 0,50")
   or die(mysqli_error());

このコードは、4、3、6 などのすべてのユーザーを表示しますが、は 1として定義されているw_idため、1 のユーザーのみである必要があります。$webshop_info[w_id]

助言がありますか?

4

5 に答える 5

4

かっこを使用して、すべての「OR」ステートメントをグループ化します。

SELECT * FROM customers WHERE (... OR ... OR ...) AND ... 

演算子の優先順位について詳しくは、こちらをご覧ください。

于 2013-09-26T15:57:54.183 に答える
2

クエリを次のように変更します。

SELECT *
FROM customers
WHERE ((`firstname` LIKE '%".$search."%')
  OR (`lastname` LIKE '%".$search."%')
  OR (`adress` LIKE '%".$search."%')
  OR (`email` LIKE '%".$search."%'))
  AND (w_id='$webshop_info[w_id]') LIMIT 0, 50

注意してくださいwhere ( (condition1) or (condition2)) & (condition)

コードは SQL インジェクション攻撃に対して脆弱であることに注意してください。関係者と一緒に準備されたクエリを使用してください。

例: (このコードをコピーしないでください。これは説明のために提供されているだけです)

$query = 'SELECT *
FROM customers
WHERE (
  (`firstname` LIKE ?)
  OR (`lastname` LIKE ?)
  OR (`adress` LIKE ?)
  OR (`email` LIKE ?)
  )
  AND (w_id=?) 
  LIMIT 0, 50';


    $stmt = $mysqli->prepare($query);

    $stmt->bind_param("s", '%'.$search.'%');
    $stmt->bind_param("i", $w_id);

    $search = $_GET['search'];;
    $w_id = $webshop_info['w_id'];

    $stmt->execute();
于 2013-09-26T15:57:36.580 に答える
0

これを試して:

SELECT *
FROM customers
WHERE ((`firstname` LIKE '%".$search."%')
  OR (`lastname` LIKE '%".$search."%')
  OR (`adress` LIKE '%".$search."%')
  OR (`email` LIKE '%".$search."%'))
  AND (w_id='{$webshop_info[w_id]}') LIMIT 0, 50

中括弧が必要です。

于 2013-09-26T15:58:04.753 に答える
0

このクエリを試してください (引用符の間に「w_id」):

"SELECT * FROM customers
   WHERE (`firstname` LIKE '%".$search."%' 
   OR `lastname` LIKE '%".$search."%'
   OR `adress` LIKE '%".$search."%'
   OR `email` LIKE '%".$search."%') AND w_id=". $webshop_info['w_id'] ." limit 0,50"
于 2013-09-26T15:58:44.093 に答える
0

Why '%".$search."%' また、OR を () で結合します。

$raw_search_results = mysqli_query($con,"SELECT * FROM customers
       WHERE (`firstname` LIKE '%$search%' 
       OR `lastname` LIKE '%$search%'
       OR `adress` LIKE '%$search%'
       OR `email` LIKE '%$search%') AND w_id='$webshop_info[w_id]' limit 0,50")
       or die(mysqli_error());
于 2013-09-26T15:59:15.807 に答える