PHP sql查询和多个WHERE的
我有一个自动完成的表,它使用我的index.php页面中的$ request过滤IDNO,姓,引用和transno字段。PHP sql查询和多个WHERE的
Raceid也从索引页传递给fetch.php筛选记录(原为网址的index.php页面上。
我的SQL查询不进行筛选。它显示的所有记录。当只有我使用“WHERE‘$ raceid’= raceid”“的一部分,那么它过滤100%。
我不能与代码结合起来下方,以获得结果。
如何使用两个”哪来的相同的SQL查询过滤表?
Fetch.php
你不应该重新申报WHERE
。其实你不能重新申报吧。
在你下面的查询:
$query = "
SELECT * FROM tblentries
WHERE '$raceid' = raceid
AND WHERE idno LIKE '%".$request."%'
OR surname LIKE '%".$request."%'
OR reference LIKE '%".$request."%'
OR transno LIKE '%".$request."%'
";
只需删除第二WHERE
:
$query = "
SELECT * FROM tblentries
WHERE '$raceid' = raceid
AND idno LIKE '%".$request."%'
OR surname LIKE '%".$request."%'
OR reference LIKE '%".$request."%'
OR transno LIKE '%".$request."%'
";
然而,牢记上述查询的 '逻辑';因为它的立场,种族ID将需要等于raceid
和idno
将需要等于请求... 或任何其他值需要匹配。也就是说,如果您的OR
条件触发,您不需要raceid
!你可能想利用括号来解决这个问题。
我已经分裂行了一点点进一步清楚地表明这在下面的例子:
$query = "
SELECT * FROM tblentries
WHERE '$raceid' = raceid
AND
(
idno LIKE '%".$request."%'
OR surname LIKE '%".$request."%'
OR reference LIKE '%".$request."%'
OR transno LIKE '%".$request."%'
)
";
希望这有助于! :)
您只需将您的“OR”值包装在括号内,以使其与raceid检查分开。
$query = "
SELECT * FROM tblentries
WHERE
'$raceid' = raceid
AND
(
idno LIKE '%".$request."%'
OR surname LIKE '%".$request."%'
OR reference LIKE '%".$request."%'
OR transno LIKE '%".$request."%'
)
";
请确保您查看使用准备好的语句!直接将$ _POST ['raceid']注入查询会导致您的问题。
我认为有两个错误在您的查询:
- 你传入
$radeid
错误
应该是raceid = '".$raceid."'
例如:
$query = "
SELECT * FROM tblentries
WHERE raceid = ".$raceid."
AND WHERE idno LIKE '%".$request."%'
OR surname LIKE '%".$request."%'
OR reference LIKE '%".$request."%'
OR transno LIKE '%".$request."%'
";
-
您正在使用的地方两次,删除一个地方我。Ë
$query = " SELECT * FROM tblentries WHERE raceid = ".$raceid." AND idno LIKE '%".$request."%' OR surname LIKE '%".$request."%' OR reference LIKE '%".$request."%' OR transno LIKE '%".$request."%' ";
最终的查询是
$query = "
SELECT * FROM tblentries
WHERE raceid = ".$raceid."
AND (idno LIKE '%".$request."%'
OR surname LIKE '%".$request."%'
OR reference LIKE '%".$request."%'
OR transno LIKE '%".$request."%')
";
1.顺序无关紧要。 – Aknosis
感谢一百万人的工作! – user7174575
Aknosis和RToyota。我很快就说话了。它根据我从另一个页面传递的url值过滤了查询100%,但“index.php”中的“employee_search”框不再通过他的sql查询过滤“fetch.php”中的表格。 我的索引页面将值传递给fetch.php,你们很好地协助了我,看起来像这样。
当我删除“$ raceid = $ _POST ['raceid'];”代码 并使用
if(isset($_POST["query"]))
{
$connect = mysqli_connect("localhost", "root", "", "registerdb");
$request = mysqli_real_escape_string($connect, $_POST["query"]);
$query = "
SELECT * FROM tblentries
WHERE idno LIKE '%".$request."%'
OR surname LIKE '%".$request."%'
OR reference LIKE '%".$request."%'
OR transno LIKE '%".$request."%'
ORDER BY surname ASC, firstname ASC
";
然后它过滤的搜索框。随着包括在你的代码raceid,它只有通过过滤传入raceid的URL值。 我们再怎么改变这个SQL查询的任何建议请?
<!DOCTYPE html>
<html>
<head>
<title>Entry details</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-3-typeahead/4.0.2/bootstrap3-typeahead.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
</head>
<body>
<br /><br />
<td><a style="color:white;background-color: blue;height:40px;width:200px;font-size: 20px; position:absolute; TOP:3px;LEFT:70px;" class="btn btn-success" id="myBtn" href="admin1.php""><span align="center" name="myBtn" aria-hidden="true" ></span>Return Dashboard</a></td>
<div class="container">
<td><a style="color:white;background-color: blue;height:40px;width:140px;font-size: 20px; position:absolute; TOP:95px;LEFT:80px;" class="btn btn-success" id="myBtn" href="#" onClick="history.go(0)"><span align="center" name="myBtn" aria-hidden="true" ></span> Clear Search</a></td>
<u><h2 align="center">Check Race Payment Status</h2></u>
<br /><br />
<label style="font-size:25px"><u>Search Person Details by Surname/ID No or Barcode scanner:</u></label>
<div id="search_area">
<input type="hidden" class="form-control" name="raceid" id="raceid"
value="<?php echo $_GET['a']?>"/>
<input type="text" name="employee_search" id="employee_search" class="form-control input-lg" autocomplete="off" placeholder="Type Employee Name" />
</div>
<br />
<br />
<div id="employee_data"></div>
</div>
</body>
</html>
<script>
$(document).ready(function(){
load_data('');
function load_data(query, typehead_search = 'yes')
{
$.ajax({
url:"fetch.php",
method:"POST",
data:{query:query, typehead_search:typehead_search},
success:function(data)
{
$('#employee_data').html(data);
}
});
}
$('#employee_search').typeahead({
source: function(query, result){
$.ajax({
url:"fetch.php",
method:"POST",
data:{query:query},
dataType:"json",
success:function(data){
result($.map(data, function(item){
return item;
}));
load_data(query, 'yes');
}
});
}
});
$(document).on('click', 'li', function(){
var query = $(this).text();
load_data(query);
});
});
</script>
事实上,你需要* NOT * redeclare'WHERE'。 ;) –
哈哈,是的,我应该更换那里的术语来强调:P –