Я пытаюсь создать простую нумерацию страниц, используя Bootpag.js
для того, чтобы получить мои данные, я создал PDO
сценарий с INNER JOIN
потому что мне нужно получить и отобразить имена команд пользователей из другой таблицы, и мне нужно подать заявку LIMIT
установить выбор страницы.
Это проблемный код,
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();
Я попробовал тот же SQL в phpMyAdmin, он работал без каких-либо ошибок, я не знаю, почему он выдает ошибку ниже при использовании с PHP + PDO.
Примечание: о дубликате, который я искал на сайте, используя bindParam
но я не видел дубликат, и это действительно не решило мою проблему. Выбранный ответ для этого сделал каким-либо образом, если пометить, что
Ошибка:
Неустранимая ошибка: необработанное исключение «PDOException» с сообщением «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с » 0 ‘,’ 3 » в строке 1 ‘в ******** \ fetchUserList.php в строке 27
В режиме эмуляции (который включен по умолчанию) PDO заменяет местозаполнители фактическими данными, а не отправляет их отдельно. PDO обрабатывает каждый параметр как строку. В результате готовится LIMIT?,? запрос становится LIMIT '0', '3'
который является недопустимым синтаксисом, который приводит к сбою запроса.
Когда вы используете bindParam для каждой переменной явно, вам необходимо установить правильный тип параметра.
вам может потребоваться отключить эмуляцию:
$dbConnect->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
затем
<?php
$getUsersQuery -> bindParam(':place', $position,PDO::PARAM_INT);
$getUsersQuery -> bindParam(':item_per_page', $perpage,PDO::PARAM_INT);
?>
Когда вы используете лимит / смещение, вам нужно ввести каст и передать как целое число. В противном случае обычно он принимает это как строку
$getUsersQuery->bindParam(':place', (int) trim($position), PDO::PARAM_INT);
$getUsersQuery->bindParam(':item_per_page', (int) trim($perpage), PDO::PARAM_INT);