2017-09-12 8 views
1

Bootpag.jsを使用して簡単なページ設定を作成しようとしています。私はのPDOスクリプトを作成しました。ユーザを取得して表示する必要があります。他のテーブルのチーム名もLIMITを適用してページ選択を設定する必要があります。LIMITが適用されているときにDWL with LIMITが機能しない

これは、私はそれが出てPHP + PDOで使用した場合、それは以下のエラーを投げ、なぜ私にはわからないすべてのエラーを働いたのphpMyAdminで同じSQLを試してみました、

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(); 

面倒なコードです。

注:重複について私はbindParamを使用してサイトを検索してきたが、私は重複を見ていないと何

をマーク取得する場合も、それは本当にこのために選択した答えはどのような方法をした私の問題を解決しませんでした

エラー:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0', '3'' at line 1' in ********\fetchUserList.php on line 27

+0

あなたはエミュレーションをオフにしたのですか?また、適切なパラメータタイプを設定する必要があります –

+0

あなたの言ったことを残念にしませんでした。 – Sand

+0

[LIMIT句でbindValueメソッドを適用するにはどうすればいいですか?](https://stackoverflow.com/questions/2269840/how-to-apply-bindvalue-method-in-limit-clause) – Blank

答えて

2

としてそれを取ります。その結果、準備された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); 

?> 
+0

答えが私の問題を解決しましたしかし私はこれを削除しなければならない 'それは重複としてマークされているので。私は 'bindparam'を' bindValue'として検索していませんでしたので、それは見えませんでしたが、誰かが私のために検索する時間がありました。私はエミュレーションについて追加することをもう一つ分かっていませんでした。 – Sand

+0

その大丈夫、あなたが答えを受け入れるかもしれない、接続が確立された直後にエミュレーションがオフにされている、 –

+0

ああ、私はあなたの時間のために非常に感謝します。 – Sand

2

あなたが制限/を使用しているあなたはカーストを入力し、整数として渡す必要がありますオフセット。それ以外の場合は、通常、それはお菓子を文字列としてすべてのパラメータをseparately.PDO代わりに送信するのでは、文字列(デフォルトでオンになって)エミュレーションモードでは、PDOは、実際のデータとのプレースホルダを置換

$getUsersQuery->bindParam(':place', (int) trim($position), PDO::PARAM_INT); 
$getUsersQuery->bindParam(':item_per_page', (int) trim($perpage), PDO::PARAM_INT); 
関連する問題