<?php
try
{
$db = new PDO("mysql:host=localhost;dbname=DBNAME", "USER", "PASSWD");
$stmt = $db->prepare("SELECT id, name FROM testdb ORDER BY time DESC LIMIT :index, 10");
$stmt->bindValue(":index", $_GET['index'], PDO::PARAM_INT);
$stmt->execute();
while( $r = $stmt->fetch(PDO::FETCH_ASSOC) )
{
echo var_dump($r);
}
}
catch( PDOException $e )
{
die("Exception");
}
問題は次の行にあります。$stmt->bindValue(":index", $_GET['index'], PDO::PARAM_INT);
特定のパラメーターは 2 番目のパラメーターです。
上記のコードは機能しません。何も返さないため、while ループは実行されません。$_GET['index'] を 10 などの数値に置き換えると、問題なく動作し、10 行が返されます。$_GET['index'] をエコーすると数値が表示されるため、数値を渡す必要があります。bindParam も試しましたが、結果は同じです。
なぜこれが機能しないのですか?
編集:
面白い...交換$_GET['index'] with (int)$_GET['index']
するとうまくいきます。