0

これは私のコードです

$PageNumber = $_GET["p"];
if (!isset($PageNumber) || $PageNumber < 1 || !is_int($PageNumber))
    $PageNumber = 1;
$PageSize = 3;
$strSQL = $dbCon->prepare("SELECT * FROM News WHERE isActive = 1 ORDER BY NewsID DESC LIMIT (:PageNumber - 1)*:PageSize, :PageSize;");
$strSQL->bindParam(":PageNumber", $PageNumber, PDO::PARAM_INT);
$strSQL->bindParam(":PageSize", $PageSize, PDO::PARAM_INT);
$strSQL->execute();
$Result = $strSQL->fetchAll();
if (count($Result) != 0) {
    print_r($Result);
} else {
    echo "no record";
}

行が存在することは確かですが、出力はです。no recordパラメータをデフォルト値に置き換えると、LIMIT 0,3うまく機能します。

4

3 に答える 3

2

あなたは例外をキャッチしていないので、間違っていると思います.PDOでは、bindValueまたはbindParam変数はクエリで使用されるものと同じでなければなりません。つまり

$strSQL = $dbCon->prepare("SELECT * FROM News WHERE isActive = 1 ORDER BY NewsID DESC LIMIT :Start, :PageSize;");
$strSQL->bindParam(":Start",($PageNumber - 1)*$PageSize, PDO::PARAM_INT);
$strSQL->bindParam(":PageSize", $PageSize, PDO::PARAM_INT);
于 2012-07-06T10:32:58.590 に答える
1

準備されたステートメント内で数学演算子を使用しようとしたので、これを試してください。それらを置き換えて、割り当ての場所で実行しました。

$PageNumber = $_GET["p"];
if (!isset($PageNumber) || $PageNumber < 1 || !is_int($PageNumber))
    $PageNumber = 1;
$PageSize = 3;
$strSQL = $dbCon->prepare("SELECT * FROM News WHERE isActive = 1 ORDER BY NewsID DESC LIMIT :PageNumber, :PageSize;");
$strSQL->bindParam(":PageNumber", ($PageNumber - 1) * $PageSize, PDO::PARAM_INT);
$strSQL->bindParam(":PageSize", $PageSize, PDO::PARAM_INT);
$strSQL->execute();
$Result = $strSQL->fetchAll();
if (count($Result) != 0) {
    print_r($Result);
} else {
    echo "no record";
}
于 2012-07-06T10:32:24.723 に答える
0

問題は、同じトークンを2回使用したことだと思います( ":PageSize")。

PDO :: prepare()のphpドキュメントで述べたように:

プリペアドステートメントで同じ名前の名前付きパラメーターマーカーを2回使用することはできません。

したがって、各トークンは1回しか使用できないため、「:PageSizeA」と「:PageSizeB」などの2つの異なるトークンを使用する必要があります。

$strSQL = $dbCon->prepare("SELECT * FROM News WHERE isActive = 1 ORDER BY NewsID DESC LIMIT (:PageNumber - 1)*:PageSizeA, :PageSizeB;");
$strSQL->bindParam(":PageNumber", $PageNumber, PDO::PARAM_INT);
$strSQL->bindParam(":PageSizeA", $PageSize, PDO::PARAM_INT);
$strSQL->bindParam(":PageSizeB", $PageSize, PDO::PARAM_INT);

とにかく、@ user1432124または@Rameshのソリューションは、mysqlではなくphpでデータを処理するため、より優れています。witchが実行する必要があります。

于 2012-08-09T11:08:46.347 に答える