我尝试使用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
答案 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);
?>