Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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 检查行是否包含字符串中的子字符串_Php_Mysql_Sql_String - Fatal编程技术网

Php 检查行是否包含字符串中的子字符串

Php 检查行是否包含字符串中的子字符串,php,mysql,sql,string,Php,Mysql,Sql,String,我想检查表ssd是否有一行包含值2280 a子字符串,但问题是我只能得到一个字符串来检查,其中包含多个值,包括子字符串。下表: --+---------- id | m2len --+---------- 1 | 2280 --+---------- 2 | 2260 --+--------- 查询: $m2len = "2242 2260 2280 22110" $sql = "SELECT m2len FROM ssd WHER m2len LIKE '%$m2len%'"; 即使表ss

我想检查表ssd是否有一行包含值2280 a子字符串,但问题是我只能得到一个字符串来检查,其中包含多个值,包括子字符串。下表:

--+---------- id | m2len --+---------- 1 | 2280 --+---------- 2 | 2260 --+--------- 查询:

$m2len = "2242 2260 2280 22110"
$sql = "SELECT m2len FROM ssd WHER m2len LIKE '%$m2len%'";
即使表ssd的行m2len包含值2280,此查询也不会给出输出

有没有办法用MySQL检查一行是否包含字符串2242 2260 2280 22110中的子字符串2280

注意:这个问题可能看起来类似于,但不是因为另一个问题只是检查字符串是否包含子字符串,但这里我正试图做相反的事情

更新:

@约翰武的回答奏效了。但对于其他值,如0、80、22,它也会返回不需要的行。我想要一个完全匹配的

该表还可能包含以下值:

id | m2len
----+-------------------
  1 | 2280
----+-------------------
  2 | 2260 
----+------------------
  3 | 0
----+------------------
  4 | 80 
----+------------------
试试这个:

$sql = "SELECT m2len FROM ssd WHERE m2len = MID('$m2len',11,4)";

我假设2280始终处于相同的位置

您需要在查询中交换值和列

$m2len = "2242 2260 2280 22110"
$sql = "SELECT m2len FROM ssd WHERE '$m2len' LIKE CONCAT('%', m2len, '%')";
这里有一个

还有一种解决方案使用[FIND_IN_SET],但值必须用逗号分隔

$m2len = "2242 2260 2280 22110";
$m2len = str_replace(" ",",",$m2len);
$sql = "SELECT m2len FROM ssd WHERE FIND_IN_SET(m2len,'$m2len')";

这里有一个问题。

因为您使用的是php,所以您可以使用它,您应该注意sql注入,但问题不在这里:

$m2len = "2242 2260 2280 22110";
$prepareM2len = "(".substring(" ",",",$m2len).")";
$sql = "SELECT m2len FROM ssd WHER m2len in ".$prepareM2len ;
将此转换为:

"2242 2260 2280 22110"
为此:

"2242, 2260, 2280, 22110"
并构建您的查询。以下是过于简化的版本:

$m2len = "2242 2260 2280 22110";
$csv = str_replace(" ", ", ", $m2len);
$sql = "SELECT m2len FROM ssd WHER m2len IN ($csv)";

具体问题是什么,是否只需要从字符串中提取第三个值,是否要匹配所有值等?行仅包含一个值,即2280,但我必须检查的字符串有多个值2242 2260 2280 22110。现在我不能使用像%'2242260 2280 22110%这样的字符来查找2280,因为您似乎想检查字符串中的每个元素。您可以使用explode$m2len_array=explode$m2len将变量$m2len分解为一个数组;在$m2len_数组上使用foreach来针对每个数组元素构建查询的where部分。您还可以使用FIND_IN_SET