1

我在 PHP 中有一个搜索查询,您可以在其中搜索用户数据库。只有连接到一个特定 ID (w_id) 的用户才会显示,这一点很重要。每个用户都有一个。换句话说,我不希望其他管理员看到不属于搜索者的客户。

所以我为每个用户指定了一个 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());

这段代码显示了所有具有w_id4、3、6 等的用户,但它应该只有具有 1 的用户,因为$webshop_info[w_id]它被定义为 1。

有什么建议么?

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

为什么 '%".$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 回答