为什么我的查询使用带有php PDO的LIKE返回0行

时间:2017-05-28 02:33:13

标签: php mysql ajax pdo

所以我在我的js中有这个ajax keyup搜索事件

$("#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变量。

感谢任何可以帮助我的人!

1 个答案:

答案 0 :(得分:0)

了解类似PDO的语句:

这是错误的:

 "SELECT * FROM `users` WHERE `name` LIKE '%:key%'";

CORRECT解决方案就是像这样保留占位符:

 "SELECT * FROM `users` WHERE `name` LIKE :key";

然后将百分比添加到存储关键字的php变量中:

$key= "%".$key."%";

参考php PDO手册。

希望它对你有所帮助。