Php 检查行是否包含字符串中的子字符串
我想检查表ssd是否有一行包含值2280 a子字符串,但问题是我只能得到一个字符串来检查,其中包含多个值,包括子字符串。下表: --+---------- id | m2len --+---------- 1 | 2280 --+---------- 2 | 2260 --+--------- 查询: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
$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