以下に示すように、単純な7 行のスクリプトがあります。 PHP
コード
require( "connect.php" );
$ctg = ($_GET['ctg'])? $_GET['ctg']:'movie';
$offset = ($_GET['off'])? $_GET['off']:30;
$query = "SELECT `msg`, `id`, `nick`, `date` FROM `entries` WHERE `ctg` = ? ORDER BY `id` DESC LIMIT 15 OFFSET ?";
$statemnt = $conn->prepare( $query );
$statemnt->bindParam( 1, $ctg, PDO::PARAM_STR );
$statemnt->bindParam( 2, $offset, PDO::PARAM_INT );
$statemnt->execute();
$results = $statemnt->fetchAll( PDO::FETCH_ASSOC );
echo "$ctg\n$offset\n" . count($results) . "\n";
問題
私が直面している問題は次のようなものです:コンソールでファイルを実行すると(を使用してphp fetch.php
)、すべてecho
うまくいきます。変数なしでブラウザーでページを開くと$_GET
、同じ出力が観察されます。
ctg
ブラウザの出力は、インデックス付き変数( など)だけを指定した場合と同じhttp://localhost/fetch.php?ctg=docu
です。出力は正しいです。このような:
docu
30
15
しかし、off
インデックス変数を渡すと ( OR ORとして); 出力は常に次のようになります。fetch.php?off=15
fetch.php?ctg=docu&off=15
fetch.php?off=15&ctg=docu
docu
15
0
質問
出力 (およびvar_dump
) は両方とも正しい値が両方の変数に渡されていることを示していますが、なぜ PDO ステートメントは結果を受け取っていないのでしょうか? count($results)
残りが0になるのはなぜですか?
どんな助けでも大歓迎です。
PS
また、次のステートメントを含めました。
$statemnt->debugDumpParams();
これはブラウザ(およびコンソール)にこれをダンプします:
SQL: [102] SELECT `msg`, `id`, `nick`, `date` FROM `entries` WHERE `ctg` = ? ORDER BY `id` DESC LIMIT 15 OFFSET ?
Params: 2
Key: Position #0:
paramno=0
name=[0] ""
is_param=1
param_type=2
Key: Position #1:
paramno=1
name=[0] ""
is_param=1
param_type=1