【问题标题】:Search by criteria not returning any records按条件搜索不返回任何记录
【发布时间】:2013-04-14 10:24:21
【问题描述】:

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

请问,我错过了什么?

【问题讨论】:

    标签: php sql


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢Zavg。这解决了查询。但我也关心我的分页。我按两个条件(类别、cmaterial)进行搜索,但查询只打印了这一行:SELECT * FROM collections WHERE c_id>0 AND cat_id LIKE '%2.\'%' ORDER BY c_id ASC 无法执行查询并在网址是:...gallery.php?s=8%27.&cat_id=2&cmaterial=wood.%27。问题可能出在哪里?
    • 尝试调试代码检查是否执行了两次条件连接。连接后将 var_dump($likes) 添加到 elseif 块
    • 这是打印的内容: string(0) "" string(0) "" string(0) "" string(24) " AND cat_id LIKE '%2%'" string( 57) " AND cat_id LIKE '%2%' AND cmaterial LIKE '%wood.\'%'" 字符串(57) " AND cat_id LIKE '%2%' AND cmaterial LIKE '%wood .\'%'" string(57) " AND cat_id LIKE '%2%' AND cmaterial LIKE '%wood.\'%'" string(57) " AND cat_id LIKE '%2%' AND cmaterial LIKE '%wood.\'%'" string(57) " AND cat_id LIKE '%2%' AND cmaterial LIKE '%wood.\'%'" 无法执行查询。你是对的,查询可能会重复,但我该如何解决这个问题?
    • 这似乎没问题,所以 $sql var 应该包含 " AND cat_id LIKE '%2%' AND cmaterial LIKE '%wood.\'%"
    • 链接显示如下: echo 'Page 1' ;但我不明白为什么 NEXT PREVIOUS 链接没有返回记录。
    猜你喜欢
    • 2020-02-28
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    相关资源
    最近更新 更多