Php 如何检查数据库中是否存在多个字符串?

Php 如何检查数据库中是否存在多个字符串?,php,mysql,Php,Mysql,我有一个名为tags的表,如下所示: / tags +----+------+--------------------------------------------+ | id | name | explanation | +----+------+--------------------------------------------+ | 1 | PHP | It is a server-side scripting lan

我有一个名为
tags
的表,如下所示:

/ tags
+----+------+--------------------------------------------+
| id | name |                 explanation                |
+----+------+--------------------------------------------+
| 1  | PHP  | It is a server-side scripting language     |
| 2  | C++  | It is a middle-level programming language  |
| 3  | HTML | It is a markup language                    |
| 4  | CSS  | It is a style sheet language               |
| 5  | JS   | It is a prototype-based language           |
+----+------+--------------------------------------------+
$str = "PHP , CSS";
我还有这样一个字符串:

/ tags
+----+------+--------------------------------------------+
| id | name |                 explanation                |
+----+------+--------------------------------------------+
| 1  | PHP  | It is a server-side scripting language     |
| 2  | C++  | It is a middle-level programming language  |
| 3  | HTML | It is a markup language                    |
| 4  | CSS  | It is a style sheet language               |
| 5  | JS   | It is a prototype-based language           |
+----+------+--------------------------------------------+
$str = "PHP , CSS";
现在我需要检查数据库中是否同时存在
PHP
CSS
?通常有两种情况:

  • True
    :字符串中的所有标记都存在于数据库中
  • False
    :数据库中不存在字符串中的一个或多个标记

我可以分解该字符串并创建这些标记的数组:

$tags = trim(explode(",",$str)); // Array ( [0] => PHP [1] => CSS )
然后创建多个查询以分别检查每个查询:

$i= count($tags);
for($i; $i <= 0; $i--){
    $query .= "SELECT count(1) FROM `tags` WHERE `name` =".$tags[$i]." UNION ALL";
}
$query = rtrim($query, "UNION ALL"); // to remove last 'UNION ALL' which is redundant
$i=count($tags);
对于($i;$i,您还可以在('PHP','CSS')中使用,并检查计数是否匹配。请尝试-

$tags = explode(",",$str);
$tags = array_map('trim', $tags);

$query = "SELECT count(1) FROM `tags` WHERE `name` IN ('" . implode("','", $tags) . "')";
执行查询后,匹配计数

if($countOfResult === count($tags));
您还可以在('PHP','CSS')中使用,并检查计数是否匹配。请尝试-

$tags = explode(",",$str);
$tags = array_map('trim', $tags);

$query = "SELECT count(1) FROM `tags` WHERE `name` IN ('" . implode("','", $tags) . "')";
执行查询后,匹配计数

if($countOfResult === count($tags));

你可以这样做。试试这个:

您的新查询:

$str = "PHP , CSS";
$search = join(",", trim(explode(",",$str)));
$sql = "SELECT count(1) FROM `tags` WHERE `name` IN ($search)";
$qry = mysql_query($sql);

if(sizeof($qry) == sizeof(explode(",",$str))) 
    echo "True";
else
    echo "False";

我想现在你可以做了。

你可以这样做。试试这个:

您的新查询:

$str = "PHP , CSS";
$search = join(",", trim(explode(",",$str)));
$sql = "SELECT count(1) FROM `tags` WHERE `name` IN ($search)";
$qry = mysql_query($sql);

if(sizeof($qry) == sizeof(explode(",",$str))) 
    echo "True";
else
    echo "False";
我想现在你可以做了。

你可以试试这个:

SELECT COUNT(name),name FROM `tags` WHERE name in ('PHP','CSS') group by name;
您可以尝试以下方法:

SELECT COUNT(name),name FROM `tags` WHERE name in ('PHP','CSS') group by name;

如果
$tags
是用户输入,则此查询可用于sql注入。@Daan.同意。但这里我只是考虑
字符串
@Daan您有什么建议如何防止该查询出现sql注入?您可以使用准备好的语句或正确验证输入。如果
$tags
是用户输入,则此查询可用于操作n表示sql注入。@Daan.同意。但这里我只是在考虑
字符串
@Daan您有什么建议可以防止该查询的sql注入吗?您可以使用准备好的语句或正确验证输入。
name
是唯一的。
groupby
是多余的。
name
是唯一的。
name
是唯一的。
认为分组方式是多余的。