我将尝试显示我的搜索表单,并继续讨论公共方法代码。
这是我的表单(基本):<form action="" method="get">
Name:<input type="text" name="name">
Last Name:<input type="text" name="last_name">
Age:<input type="text" name="age">
<input type="submit" value="search" name="search">
</form>
继续我的get方法:
public function get($table){
$ssql = 'SELECT * FROM '.$table.' WHERE `name` LIKE :name || `last_name` LIKE :last_name';
$name = '%'.$_GET['name'].'%';
$last_name = '%'.$_GET['last_name'].'%';
$stm = $this->dbh->prepare($ssql);
$stm->bindParam(':name',$name,PDO::PARAM_STR);
$stm->bindParam(':last_name',$last_name,PDO::PARAM_STR);
$stm->execute();
echo $stm->rowCount();
while($result = $stm->fetch(PDO::FETCH_OBJ)){
echo $result->name.' '.$result->last_name.'<br>';
}
}
基本上这应该给我基于我的$_GET
表单字段的结果。我的问题是,如果我输入名称"juris",它不输出只有3行juris是在数据库中,但从数据库的所有字段。但是如果我输入姓氏,然后提交,它只给出法律记录,然后忽略姓氏搜索项。
不应该像"WHERE etc like"term1或"term2"之类的查询基于2个给定变量之间的或给出结果?它应该分开的结果,如果一个变量$_get['value']
是给定的,其他是空的?
让它按预期工作,但也许有人可以给出一个更清晰的答案,如何分离"%%"这个通配符?
$ssql = 'SELECT * FROM '.$table.' WHERE (`name` LIKE :name) || (`last_name` LIKE :last_name)';
if(empty($_GET['name'])){
$name = "";
}else {
$name = '%'.$_GET['name'].'%';
}
if(empty($_GET['last_name'])){
$last_name = "";
}else{
$last_name = '%'.$_GET['last_name'].'%';
}
使用if语句分隔%%通配符。
您需要使用括号将两个字段比较分组,如下所示:
SELECT * FROM '.$table.' WHERE (`name` LIKE :name && :name_prov = 1) || (`last_name` LIKE :last_name && :last_name_prov = 1)
所以昨天我试图弄清楚我如何从SQL查询中分离"%%"通配符。我对这个问题的回答是检查字段是否为空,然后将$variable更改为空字符串。如果没有,则与$_GET方法一起使用,并使用"%%"通配符。使用LIKE语句查询得到想要的结果