1

ご覧のとおり、準備済みステートメントを使用しているときに、テーブルから行をフェッチしようとしています。

$stmt = $conn->prepare("SELECT * FROM table ORDER BY date DESC LIMIT ?, 10");
$stmt->bindParam(1, $row_start, PDO::PARAM_INT);
$stmt->execute();

while($row = $stmt->fetch()) {
echo $row['title'];
echo $row['name'];
}

何も反響しません。

編集: var_dump はこのログを表示しています:

"SQL 構文にエラーがあります。1 行目の ''0', 10' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください" }

編集2:これが私の宣言方法です$row_start

$row_start = "0";
if (isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] != "0" )
{
$row_start = $_GET['page'];
if ($row_start == "1") {
$row_start = "0";
}else{
$row_start = ($row_start-1) * 10;
}                       
}
4

2 に答える 2

3

デフォルトでは、値のタイプは文字列になります。

次のように整数に設定できます。

$stmt->bindParam(1, $row_start, PDO::PARAM_INT);

アップデート:

INTに強制していても、文字列として渡されます。

エラーメッセージを見てください。

near ''0', 10' at line 1" }

具体的には'、0の後に終了し、文字列であることを示します。

0'

アップデート

予想されるPDOタイプを渡した場合でも、変数を手動で型キャストする必要があります。

$limit = (int) 1;
$limit2 = (int) 1;


$stmt = $pdo->prepare("SELECT * FROM Table LIMIT :limit, :offset");
$stmt->bindParam(":limit", $limit, PDO::PARAM_INT);
$stmt->bindParam(":offset", $limit2, PDO::PARAM_INT);
$stmt->execute();
于 2012-08-08T16:47:46.093 に答える
0
$conn->prepare("SELECT * FROM table ORDER BY date DESC LIMIT ?");
$stmt->execute(array(10));
于 2012-08-08T16:45:41.843 に答える