当LIMIT应用时,带INNER JOIN的DWL不起作用

时间:2017-09-12 08:42:57

标签: php mysql pdo

我尝试使用cache expiration创建一个简单的分页以获取我的数据我已经创建了Bootpag.js脚本PDO,因为我需要从另一个表中获取并显示用户团队名称,我还需要应用INNER JOIN来设置页面选择。

这是麻烦的代码,

LIMIT

我在phpMyAdmin中尝试了相同的SQL,它解决了任何错误,我不知道为什么在与PHP + PDO一起使用时会抛出以下错误。

注意:关于我使用session_start(); include_once("../iConnect/handShake.php"); include_once ("../Functions/userCheck.php"); if (isset($_REQUEST["page"])){ $page_number = filter_var($_POST["page"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH); if(!is_numeric($page_number)){die('Invalid page number!');} //incase of invalid page number }else{ $page_number = 1; } $perpage = 3; //get current starting point of records $position = (($page_number-1) * $perpage); //Data base join to get team names from teams data base $getUsers = "SELECT userlogin.*, teams.TeamName FROM userlogin INNER JOIN teams ON teams.tId = userlogin.uTeam ORDER BY uId DESC LIMIT :place, :item_per_page"; $getUsersQuery = $dbConnect -> prepare($getUsers); $getUsersQuery -> bindParam(':place', $position); $getUsersQuery -> bindParam(':item_per_page', $perpage); $getUsersQuery -> execute(); 搜索网站的重复内容,但我没有看到重复内容,并且它确实没有解决我的问题所选择的答案如果得到标记

,有什么办法

错误:

  

致命错误:未捕获的异常' PDOException' with message' SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在' 0',' 3'''在第1行'在第27行的******** \ fetchUserList.php

2 个答案:

答案 0 :(得分:2)

当您使用限制/偏移时,您需要输入caste并传递为整数。否则通常将其作为字符串

$getUsersQuery->bindParam(':place', (int) trim($position), PDO::PARAM_INT);
$getUsersQuery->bindParam(':item_per_page', (int) trim($perpage), PDO::PARAM_INT);

答案 1 :(得分:2)

当处于仿真模式(默认情况下处于启用状态)时,PDO会将占位符替换为实际数据,而不是单独发送.PDO将每个参数视为字符串。结果,准备好的LIMIT?,?查询变为LIMIT '0', '3',这是导致查询失败的无效语法。

当你明确地使用bindParam每个变量时,你需要设置正确的param类型。

您可能需要通过以下方式关闭模拟:

$dbConnect->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );

然后

<?php

$getUsersQuery -> bindParam(':place', $position,PDO::PARAM_INT);
$getUsersQuery -> bindParam(':item_per_page', $perpage,PDO::PARAM_INT);

?>