Php 按条件搜索,不返回任何记录

Php 按条件搜索,不返回任何记录,php,sql,Php,Sql,我试图检查POST或GET是否有我的搜索变量,然后将这些变量添加到我的查询中。然后,我想将这些变量的数组名传递到URL中,以便对搜索结果进行分页。在别人的帮助下,我已经走了这么远 $criteria = array('ctitle', 'csubject', 'creference', 'cat_id', 'cmaterial', 'ctechnic', 'cartist', 'csource', 'stolen'); $likes = ""; $url_criteria = ''; forea

我试图检查POST或GET是否有我的搜索变量,然后将这些变量添加到我的查询中。然后,我想将这些变量的数组名传递到URL中,以便对搜索结果进行分页。在别人的帮助下,我已经走了这么远

$criteria = array('ctitle', 'csubject', 'creference', 'cat_id', 'cmaterial', 'ctechnic', 'cartist', 'csource', 'stolen');
$likes = "";
$url_criteria = '';
foreach ( $criteria AS $criterion ) {
if ( ! empty($_POST[$criterion]) ) {
$value = ($_POST[$criterion]);
$likes .= " AND `$criterion` = '%$value%'";
$url_criteria .= '&'.$criterion.'='.htmlentities($_POST[$criterion]);
} elseif ( ! empty($_GET[$criterion]) ) {
$value = mysql_real_escape_string($_GET[$criterion]);
$likes .= " AND `$criterion` = '%$value%'";
$url_criteria .= '&'.$criterion.'='.htmlentities($_GET[$criterion]);
}
}
$sql = "SELECT * FROM collections WHERE c_id>0" . $likes . " ORDER BY c_id ASC";
echo $sql;
这里的问题是,在修改之前的查询之后,我用于搜索的任何条件都不会返回任何记录,即使这些记录存在。我也回应了这个查询,它打印了以下行:

SELECT * FROM collections WHERE c_id>0 AND `cmaterial` = '%wood%' ORDER BY c_id ASC

请问,我在这里遗漏了什么?

在连接部分条件时,您应该使用LIKE关键字而不是=。您的条件意味着搜索包含%符号的精确匹配,而LIKE意味着按模式搜索

$likes .= " AND `$criterion` LIKE '%$value%'";

谢谢你,扎夫。这就解决了问题。但我也关心我的分页。我按两个条件(类别、cmaterial)进行搜索,但query只打印了这一行:从c\u id>0和
cat\u id
类似“%2”的集合中选择*。按c\u id排序的\'%'ASC无法执行查询,在URL中它是:…gallery.php?s=8%27。&cat\u id=2&cmaterial=wood.%27。问题出在哪里?如果条件串联执行了两次,请尝试调试代码检查。连接后将变量dump($likes)添加到elseif块这是打印的:string(0)”“string(0)”“string(0)”“string(24)”和
cat-id
LIKE“%2%”“string(57)”和
cat-id
LIKE“%2%”和
cmatary
LIKE“%wood.\'%”字符串(57)“和
cat\u id
像“%2%”和
cmaterial
像“%wood.\'%”字符串(57)”和
cat\u id
像“%2%”和
cmaterial
像“%wood.\'%”字符串(57)”和
cat\u id
像“%2%”和
cmaterial
像“%wood.\'%”字符串(57)”和
cat\u id
LIKE“%2%”和
cmaterial
LIKE“%wood.\'%”无法执行查询。您是对的,查询可能会重复自身,但如何解决此问题?这似乎没问题,因此$sql var应该包含“以及cat\u id LIKE“%2%”和cmaterial LIKE“%wood.\%”链接的显示方式如下:echo“”;但是我不明白为什么之前的链接没有返回记录。