我正在尝试搜索我的数据库,我最初只使用一个和条件,但现在有四个,它只会刷新页面,删除字段输入。
我尝试过只使用逗号,但这似乎也行不通。我一直无法在谷歌上找到关于他们的限制的任何信息,但也没有使用四个条件的例子。我可以尝试一种正确或更好的方式吗?
if(isset($_POST['search'])){
$lname = trim($_POST['lname']);
$address = trim($_POST['address']);
$street = trim($_POST['street']);
$city = trim($_POST['city']);
$county = trim($_POST['county']);
if($lname==""){
$error[] = "Provide Last Name.";
}elseif($address=""){
$error[] = "Provide House Number/Name.";
}elseif($street==""){
$error[] = "Provide Street.";
}elseif($city==""){
$error[] = "Provide City.";
}elseif($county==""){
$error[] = "Provide County.";
}else{
try{
$stmt = $conn->prepare("SELECT * FROM clients WHERE lname=lname AND address=address AND street=street AND city=city AND county=county");
$stmt->execute(array("lname"=>$lname, "address"=>$address, "street"=>$street, "city"=>$city, "county"=>$county));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);
if($userRow==''){
$user->redirect('./results.php?new='.$lname.$street);
}else{
if($userRow['rating'] == 'good'){
$user->redirect('./results.php?good='.$lname.$street);
}
if($userRow['rating'] == 'cautionextra'){
$user->redirect('./results.php?cautionextra='.$lname.$street);
}
if($userRow['rating'] == 'cautiondiscount'){
$user->redirect('./results.php?cautiondiscount='.$lname.$street);
}
if($userRow['rating'] == 'cautionlate'){
$user->redirect('./results.php?cautionlate='.$lname.$street);
}
if($userRow['rating'] == 'badnopay'){
$user->redirect('./results.php?badnopay='.$lname.$street);
}
if($userRow['rating'] == 'badabusive'){
$user->redirect('./results.php?badabusive='.$lname.$street);
}
}
}
catch(PDOException $e){
echo $e->getMessage();
}
}
}
在phpmyadmin中执行SELECT * FROM clients WHERE lname=lname AND address=address AND street=street AND city=city AND county=county
会返回所有行,但是当我var_dump($userRow);
时,它会显示与我尝试搜索的行不同的行的结果。
答案 0 :(得分:1)
您不需要:":lname"
execute(array(...))
只需使用前面没有冒号的索引:"lname"
。
全线:
$stmt->execute(array("lname"=>$lname, "address"=>$address, "street"=>$street, "city"=>$city, "county"=>$county));
答案 1 :(得分:1)
问题是对equality test
列使用search
会导致很难与任何行匹配,因为:
搜索字段的方法是:
approximately match
代替input value
作为比较运算符,尝试column value
like
=
{/ 1}}。empty input value
匹配任意列值。即忽略测试提供的代码将为空输入生成代码:column like %
或将输入值包装在通配符中:column like %input value%
Untested source at Pastebin.com
未经测试的代码:
<?php // completely untested code...
$stmt = $conn->prepare("SELECT *
FROM clients
WHERE lname like :lname
AND address like :address
AND street like :street
AND city like :city
AND county like :county");
$stmt->execute(array("lname" => empty($lname) ? '%' : '%'. $lname .'%',
"address" => empty($address) ? '%' : '%'. $address .'%',
"street" => empty($street) ? '%' : '%'. $street .'%',
"city" => empty($city) ? '%' : '%'. $city .'%',
"county" => empty($county) ? '%' : '%'. $county .'%'));
$userRow = $stmt->fetch(PDO::FETCH_ASSOC);