Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从mysql中查找字符串中的值_Php_Mysql - Fatal编程技术网

Php 从mysql中查找字符串中的值

Php 从mysql中查找字符串中的值,php,mysql,Php,Mysql,我是php新手,因此需要以下方面的帮助: 我有一个像1,2,3,4,5这样的值单元格 例如,我需要检查值3是否在该单元格中 这是我的代码: $article = $db->query("SELECT users FROM products WHERE id = $product_id"); while ($data = $article->fetch_object()) { $users = $data->users; } $number_that_i_need_to_che

我是php新手,因此需要以下方面的帮助:

我有一个像1,2,3,4,5这样的值单元格

例如,我需要检查值3是否在该单元格中

这是我的代码:

$article = $db->query("SELECT users FROM products WHERE id = $product_id");
while ($data = $article->fetch_object()) {
$users = $data->users;
}

$number_that_i_need_to_check_if_is_in_string = 3;
$users = explode(',',$users);
foreach ($users as $specific) {
    //i dont know what to do here...
}
我不知道如何检查字符串中的数字3


thx。使用您的代码,您可以做到这一点

foreach($users as $specific) {
  if($number_that_i_need_to_check_if_is_in_string == $specific) {
    //do something here.
  }
}

有更好的方法可以做到这一点,包括编写查询来为您进行搜索,或者使用
array\u search
您可以像这样使用FIND\u IN\u SET mysql函数

$article = $db->query("SELECT users FROM products WHERE id = $product_id AND FIND_IN_SET(3, users)");

此查询将获得
id=$product\u id
users
字段中有3行的所有行。

您可以将其包含在查询中

SELECT users FROM products WHERE id=$product_id AND FIELD_IM_CHECKING=$number_that_i_need_to_check_if_is_in_string
或者

使用要查找的字符串作为数组的索引

while($data=$article->fetch_object()){
 $users[$data->FIELD_IM_CHECKING][]=$data->users;
最终将得到一个数组,该数组的索引是您要查找的值。因此,$users[3]将是您要查找的字段中具有“3”的所有用户


下次请提个好一点的问题。因为你没有具体的数据,我的答案也很模糊

您不需要foreach循环。一旦数组中有了所有值,就可以使用in_array()函数:

您的while循环也有问题。如果有多行以您编写的方式返回,则只会用下一行覆盖每个值,因此$users将只保留一个值,您将无法分解它

您可以通过将该行更改为以下内容,将所有值直接读取到数组中:

$users[] = $data->users;
然后


也许我误解了您的问题,但为什么不在查询中使用where之类的方法呢?正确的解决方案是规范化您的表设计,使问题变得毫无意义。
where column\u to\u check in('value 1','value 2')类似的东西。@MIIB你能告诉我如何使用查询来实现这一点吗?请看Fred ii Comments,如果你搜索1,则查找集中的查找将查找1而不是11,并尝试
选择查找集中的查找(3,'333333,'3')
它将返回
3
,这是数字
3
的位置,然后尝试
选择find_in_set(3,'333333')
它将返回0,因为找不到
3
,我尝试了,但从未匹配,因为$number\u需要\u检查\u是否在\u字符串中\u不是数字3它将变为33,或333取决于每次执行的次数
if(in_array(3,$users)){
    .....
}