按标准搜索不返回任何记录

时间:2013-04-14 10:24:21

标签: php sql

我正在尝试检查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

拜托,我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

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

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