0

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

请问,我在这里错过了什么?

4

1 回答 1

0

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

$likes .= " AND `$criterion` LIKE '%$value%'";
于 2013-04-14T10:33:34.520 回答