为什么我的查询使用LIKE和phppdo返回0行

为什么我的查询使用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

所以我的js中有一个ajax键控搜索事件

$("#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
值时使用了
%