使用多个参数(如LIKE,ORDER BY)进行搜索

时间:2019-01-07 11:14:42

标签: php pdo sql-order-by sql-like

我想为我的站点创建一个搜索表单,并且能够使用LIKE并最终使用ORDER BY通过选择多个参数进行搜索。按名称,国家和日期搜索。

InnoDB,整理utf8mb4_unicode_ci,php 5.6

<?php

if(isset($_POST['search'])){

    $sql = 'SELECT * FROM radio_posts';
    $where = array();
    $params = array();      

    if (!empty($_POST['postRadioName'])) {
        $where[] = "postName LIKE :searchRadioName";
        $params[':searchRadioName'] = '%'.$_POST['postRadioName'].'%';

    }

    if (!empty($_POST['postCountryID'])) {
        $where[] = "postCountryID = :postCountryID";
        $params[':postCountryID'] = $_POST['postCountryID'];
    }


    if (!empty($where)) {
        $sql .= ' WHERE (' . implode(') AND (', $where) . ') ' ;
    }

    $stmt = $db->prepare($sql);

    foreach($params as $param => $value) {
        $stmt->bindParam($param, $value);
    }
    $stmt->execute();    

}

?>

我的表是radio_posts,也有几列,postID,postName,postCountryID,postDate。在postName中,我有几行:新广播电台新广播电台2 新广播电台3 。当我搜索一个词(例如“ new”)时,将显示所有三行,很好。如果我通过postCountryID搜索,例如“ 3”,则仅显示一行,这也很好,因为只有一个分配给id3。但是当我同时搜索postName“ new”和postCountryID“ 3”时,则不会显示任何结果。如何解决呢?以显示对应于postName和postCountryID的行。在phpMyAdmin中可以正常工作,但是使用搜索表单不起作用:

SELECT * FROM `radio_posts` WHERE postName LIKE '%new%' AND postCountryID = 3

如果可能的话,我想问一下,按postDate列升序,降序对结果进行排序的最佳方法是什么。

1 个答案:

答案 0 :(得分:0)

$stmt->bindParam($param, $value);替换为$stmt->bindValue($param, $value);后,代码将按预期工作。对于“新”和国家/地区ID = 3,检索到一个结果。