4

重複の可能性:
LIMITのPHP PDO bindValue

私は非常にうまく機能するこのコードを持っています。

if (array_key_exists('cat', $_GET) === TRUE) {
    $category = $_GET['cat'];
} else {
    $category = '.*';
}


$conn = new PDO('mysql:host=localhost;dbname=news', 'root', '');
$stmt = $conn->prepare('SELECT * FROM stories 
                        WHERE category RLIKE :cat
                        ORDER BY score DESC LIMIT 0, 25');
$stmt -> execute(array(
    'cat' => $category,
    ));

$result = $stmt->fetchAll();

ご覧のとおり、getリクエストからカテゴリを取得し、データベースでそのカテゴリのすべてを検索します。

また、getリクエストでページを定義できるように少し追加しようとしています。クエリは、ページが1つ増えるごとに25行後に開始されます。

これが私が書いたものです:

if (array_key_exists('cat', $_GET) === TRUE) {
    $category = $_GET['cat'];
} else {
    $category = '.*';
}

if (array_key_exists('page', $_GET) === TRUE) {
    $page = intval($_GET['page'])*25;
} else {
    $page = 0;
}


$conn = new PDO('mysql:host=localhost;dbname=news', 'root', '');
$stmt = $conn->prepare('SELECT * FROM stories 
                        WHERE category RLIKE :cat
                        ORDER BY score DESC LIMIT :page, 25');
$stmt -> execute(array(
    'cat' => $category,
    'page' => $page
    ));

$result = $stmt->fetchAll();

しかし現在、ページが何であるか、またはカテゴリがあるかどうかに関係なく、クエリは何も返しません。

多分私は整数を正しく扱っていません。なぜこの結果が得られるのか、何か考えはありますか?

4

2 に答える 2

0

LIMIT条件に値を適用する方法に関する参照例のように:

$stmt -> execute(array(
  'cat' => $category,
  'page' => (int) $page
));
于 2012-10-29T18:32:48.810 に答える
-2

Rayはすでに答えを出しました。ユーザーが送信したページ変数を整数にキャストし(必ずそうしないと、SQLインジェクションに対して脆弱になります)、プレースホルダーを使用せずにクエリ文字列に直接挿入します。

于 2012-10-29T18:14:50.347 に答える