我想为我的站点创建一个搜索表单,并且能够使用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列升序,降序对结果进行排序的最佳方法是什么。
答案 0 :(得分:0)
将$stmt->bindParam($param, $value);
替换为$stmt->bindValue($param, $value);
后,代码将按预期工作。对于“新”和国家/地区ID = 3,检索到一个结果。