为什么我的查询使用LIKE和phppdo返回0行
所以我的js中有一个ajax键控搜索事件为什么我的查询使用LIKE和phppdo返回0行,php,mysql,ajax,pdo,Php,Mysql,Ajax,Pdo,所以我的js中有一个ajax键控搜索事件 $("#search").keyup(function(){ var searchText = $('#search').val(); var searchBy = $('#searchBy').val(); var newObj = { action: "search", searchText: searchText, searchBy: sea
$("#search").keyup(function(){
var searchText = $('#search').val();
var searchBy = $('#searchBy').val();
var newObj = { action: "search",
searchText: searchText,
searchBy: searchBy
}
$.ajax({
method: "POST",
url:"../_tasklogger/classes/tasklog-functions.php", //the page containing php script
dataType: 'html',
data: newObj,
success: function(response){
$("#taskTable").html(response);
},
error: function (req, status, err) {
console.log('Something went wrong', status, err, req);
}
});
});
它调用下面的php函数:
$searchText = $_POST['searchText'];
$searchBy = $_POST['searchBy'];
$limit = 5;
$sql = "SELECT *
FROM tasks
WHERE userId = :userid and :searchby LIKE :searchtext
LIMIT :datalimit";
$stmt = $db_con->prepare($sql);
$searchText = $searchText."%";
$stmt->bindParam(":userid", $_SESSION['userid']);
$stmt->bindParam(":searchby", $searchBy);
$stmt->bindParam(":searchtext", $searchText, PDO::PARAM_STR);
$stmt->bindParam(":datalimit", $limit, PDO::PARAM_INT);
if($stmt->execute()){
echo'<tr>
<th>Date</th>
<th>Task Name</th>
<th>Duration</th>
<th>Start Time</th>
<th>End Time</th>
<th colspan="2" style="text-align:center;">Action</th>
</tr>';
while ($row = $stmt->fetch()){
echo '<tr>';
echo '<td>'.$row['taskDate'].'</td>';
echo '<td>'.$row['taskName'].'</td>';
echo '<td>'.$row['duration'].'</td>';
echo '<td>'.$row['startTime'].'</td>';
echo '<td>'.$row['endTime'].'</td>';
echo '<td>
<button id="editbtn" value="'.$row['taskId'].'" class="btn waves-effect waves-light orange lighten-1 hoverable">Edit</button>
</td>';
echo '<td>
<button id="deletebtn" value="'.$row['taskId'].'" class="btn waves-effect waves-light red lighten-1 hoverable">Delete</button>
</td>';
echo '</tr>';
}
}
$searchText=$\u POST['searchText'];
$searchBy=$_POST['searchBy'];
$limit=5;
$sql=“选择*
来自任务
其中userId=:userId和:searchby LIKE:searchtext
限制:数据限制”;
$stmt=$db\u con->prepare($sql);
$searchText=$searchText.“%”;
$stmt->bindParam(“:userid”,$\u SESSION['userid']);
$stmt->bindParam(“:searchby”,$searchby);
$stmt->bindParam(“:searchtext”,$searchtext,PDO::PARAM_STR);
$stmt->bindParam(“:datalimit”,$limit,PDO::PARAM_INT);
如果($stmt->execute()){
回声'
日期
任务名称
期间
开始时间
结束时间
行动
';
而($row=$stmt->fetch()){
回声';
回显'.$row['taskDate'].';
回显'.$row['taskName'].';
回显'.$row['duration'].';
回显“.$row['startTime']”;
回显'.$row['endTime'].';
回声'
编辑
';
回声'
删除
';
回声';
}
}
但它不会返回任何内容。我已经在数据库中测试了这个查询,它运行得很好。我认为导致问题的原因是我的$searchText
变量
谢谢你能帮助我的人 理解类似PDO的语句: 这是错误的:
"SELECT * FROM `users` WHERE `name` LIKE '%:key%'";
正确的解决方案是保持占位符干净,如下所示:
"SELECT * FROM `users` WHERE `name` LIKE :key";
然后将百分比添加到存储关键字的php变量中:
$key= "%".$key."%";
参考php PDO手册
希望它能帮助您。$searchText来自哪里?这个PHP代码是在循环中执行的吗?执行查询前的值是多少?确保启用PDO错误。您是否检查了AJAX返回值以查看是否输出了任何错误?很抱歉,我没有在
$searchText
的来源处添加POST值。不,它不是在循环中执行的,它只是由一个简单的ajax请求(即keyup事件)调用。是的,我启用了PDO错误处理。我已经检查了返回值,但奇怪的是它没有输出任何错误,或者我一定错过了错误。$searchText
的值是多少?HTTP响应代码是什么?实际上它传递了if($stmt->execute())
条件,因此它意味着没有任何错误。但是是$searchText=$searchText.“%”代码>有效?HTTP响应代码为OK 200。我想一定是在声明我的$searchText
值时使用了%
。