DWL с INNER JOIN не работает при применении LIMIT

Я пытаюсь создать простую нумерацию страниц, используя 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

1

Решение

В режиме эмуляции (который включен по умолчанию) 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);

?>
2

Другие решения

Когда вы используете лимит / смещение, вам нужно ввести каст и передать как целое число. В противном случае обычно он принимает это как строку

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector