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
是唯一的。认为分组方式是多余的。