2017-05-28 107 views
0

所以我在我的JS这个AJAX KEYUP搜索事件为什么我的查询返回使用LIKE用PHP PDO 0行

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

谢谢任何​​能够帮助我的人!

+0

'$ searchText'从哪里来?这个PHP代码是在一个循环中执行的吗?执行查询之前的值是什么?确保你启用了PDO错误[错误处理](http://php.net/manual/en/pdo.error-handling.php)。您是否检查了AJAX返回值以查看是否有错误输出? – Mike

+0

对不起,我没有添加'$ searchText'来自的POST值。不,它不会在循环中执行,它只会被简单的ajax请求调用(这是关键事件)。是的,我启用了PDO错误处理。我检查了返回值,但奇怪的是它不输出任何错误,或者我一定错过了错误。 –

+0

'$ searchText'的价值是什么?什么是HTTP响应代码? – Mike

回答

0

了解PDO像声明:

这是错误的:

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

正确的解决办法是把清洁这样的占位符:

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

然后百分比增加了php变量你存储的关键字:

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

参考php PDO手册。

希望它可以帮助你。

+0

OP正确地做到了这一点。 – Mike