PHP中搜索查询的问题

PHP中搜索查询的问题,php,Php,我在PHP中有一个搜索查询,您可以在用户数据库中进行搜索。重要的是,只有连接到一个特定ID(w_ID)的用户才会显示。每个用户都有一个。换句话说,我不希望其他管理员看到不属于搜索者的客户端 因此,我为每个用户指定了一个w_id。 我的问题是,我的查询似乎忽略了这一点 这是我的密码 $raw_search_results = mysqli_query($con,"SELECT * FROM customers WHERE (`firstname` LIKE '%".$search."%

我在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\u id
4、3、6等的所有用户,但应仅显示具有1的用户,因为
$webshop\u info[w\u id]
定义为1

有什么建议吗?

将查询更改为:

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
注意
其中((条件1)或(条件2))和(条件)

请注意,您的代码容易受到SQL注入攻击,请与干系人一起使用准备好的查询

例如:(请不要复制此代码,此代码仅供解释)

将查询更改为:

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
注意
其中((条件1)或(条件2))和(条件)

请注意,您的代码容易受到SQL注入攻击,请与干系人一起使用准备好的查询

例如:(请不要复制此代码,此代码仅供解释)


使用括号将所有“或”语句分组:

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

您可以阅读有关运算符优先级的更多信息。

使用括号将所有“或”语句分组:

SELECT * FROM customers WHERE (... OR ... OR ...) AND ... 
您可以阅读有关运算符优先级的更多信息。

尝试以下操作:

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
你必须有花括号。

试试这个:

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
你必须有大括号。

试试这个查询('w_id'在引号之间):

尝试此查询('w_id'位于引号之间):

为什么“%”“$search.” 另外,在()中组合OR

为什么“%”“$search.” 另外,在()中组合OR


请尝试转义查询以插入$webshop\u信息括号可能有助于
WHERE(…)或(…)…)和…
确实,并且优先于OR。什么是
w\u id
类型?整数还是字符串?如果直接使用
$webshop\u info[w\u id]
值,会发生什么?e、 g.
w_id='1'
@revo我试过了,结果是一样的。奇怪。请尝试转义查询以插入$webshop\u信息括号可能有助于
WHERE(…)或(…)…)和…
,并且优先级高于OR。什么是
w\u id
类型?整数还是字符串?如果直接使用
$webshop\u info[w\u id]
值,会发生什么?e、 g.
w_id='1'
@revo我试过了,结果是一样的。奇怪,这绝对有道理!非常感谢。这绝对有道理!非常感谢。