gpt4 book ai didi

php - 如何使用来自 Ajax 变量的 PHP PDO 处理许多 WHERE 子句

转载 作者:行者123 更新时间:2023-11-30 22:15:11 24 4
gpt4 key购买 nike

我在使用 PDO PHP 处理多 WHERE 子句时遇到问题。我的 Ajax 代码发送两个变量,一个用于实时搜索的输入文本,一个用于下拉菜单。这是我的代码。

Ajax代码:index.php

<p style="text-align: center">Enter your search here: <input type="text" id="search" name="search" placeholder="Enter your search here">&nbsp;&nbsp;
Select education level: <select id="edulevel">
<option value="PHD">PHD</option>
<option value="MASTER">MASTER</option>
<option value="DEGREE">DEGREE</option></select></p>
<div id="contentBox" class="login, reminder" style="margin:0px auto; width:95%; overflow-y: auto; height:304px;">


<div id="result" class="login"></div>
<script type="text/javascript">

/*
setInterval(function(){
//alert('Refreshing database');
$("#result").load("res.php", "update=true").fadeIn("slow").text("Refreshing Database");
}, 10000);
*/


function update() {
$.ajax({
url: 'userres.php',
dataType: 'text',
success: function(data) {
if (parseInt(data) == 0) {
$("#result").css({ color: "red" }).text("offline");
} else {
$("#result").css({ color: "green" }).text("online");
}
}
}); // properly end the ajax() invocation
}


function ajaxSearchUpdater(){
$("#result").show();
var x = $("#search").val();
var y = $("#edulevel").val();
$.ajax({
type:'POST',
url:'userres.php',
data:'q='+x+'&e='+y,
cache:false,
success:function(data){
$("#result").html(data)
}
});
}

$(document).ready(function(e) {
ajaxSearchUpdater(); // fires on document.ready
$("#search").keyup(function() {
ajaxSearchUpdater(); // your function call
});
$("#edulevel").click(function() {
ajaxSearchUpdater(); // your function call
});
});
</script>

对于我的 php 和数据库代码:userres.php

//print_r($_GET);
$q=$_POST['q'];
if(isset($_POST['e'])){
$e=$_POST['e'];
echo $q;
echo $e;
}


$query="SELECT *
FROM viewlibrary
WHERE
studentname LIKE :q OR
matricno LIKE :q OR
title LIKE :q OR
education_level LIKE :q OR
programme LIKE :q OR
serialno LIKE :q OR
education_level = :e
ORDER BY studentname ASC";

$stmt = $db->prepare($query);
$stmt->bindValue(':q','%'.$q.'%');
$stmt->bindValue(':e',$e, PDO::PARAM_STR);
$stmt->execute();

$a = 0;

if($stmt->rowCount() > 0){
$r=$stmt->fetchAll();
echo "<table class='tablesorter' id='myTable' style='width:97%; table-border: 1'>";
echo "<thead>";
echo "<tr>";
echo "<th>No.</th>";
echo "<th>No.Matric</th>";
echo "<th>Name</th>";
echo "<th>Programme</th>";
echo "<th>Title</th>";
echo "<th>Education Level</th>";
echo "<th>Serial Number</th>";
echo "<th>Availability</th>";
echo "</tr>";
echo "</thead>";
echo "<tbody>";

foreach($r as $row){

echo "<tr align='center'><td>". ($a+1) ."</td><td>". $row['matricno'] ."</td><td>". $row['studentname'] ."</td><td>". $row['programme'] ."</td><td>". $row['title'] ."</td><td>". $row['education_level'] ."</td><td>". $row['serialno'] ."</td><td>". $row['bavailable'] ."</td></tr>";
$a++;
//echo $row['education_level'];
}
echo "</tbody>";
echo "</table>";
}
else{
echo "<p align='center'>Nothing to show you :( I am really sorry for this T_T </p>";
}


?>

这里的问题是我想让我的表格显示仅具有合适教育水平的数据列表,即“学位”、“硕士”、“博士”,这取决于用户的下拉选择。我确实回显了来自 ajax 的变量,它显示了我单击的内容,但我似乎无法找到一种方法来处理这些查询。大多数 WHERE 条件用于实时搜索,我想知道我应该如何为我的下拉列表设置条件。

最佳答案

我认为您应该按用户选择的 education_level 进行搜索。

SELECT *
FROM viewlibrary
WHERE
education_level = :e AND
(studentname LIKE :q1 OR
matricno LIKE :q2 OR
title LIKE :q3 OR
education_level LIKE :q4 OR
programme LIKE :q5 OR
serialno LIKE :q6)
ORDER BY studentname ASC

也不要尝试在单个 SQL 语句中两次使用相同的命名参数,例如

<?php 
$sql = 'SELECT * FROM some_table WHERE some_value > :value OR some_value < :value';
$stmt = $dbh->prepare($sql);
$stmt->execute( array( ':value' => 3 ) );
?>

这将不返回任何行,也不返回任何错误——您必须且仅使用每个参数一次。显然,由于可移植性问题,这是预期的行为(根据此错误报告:http://bugs.php.net/bug.php?id=33886)。

关于php - 如何使用来自 Ajax 变量的 PHP PDO 处理许多 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38567285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com