1

このクエリの何が問題になっていますか?

このクエリでこれらの引数を渡すことができません!

$offset = 5;
$rowsperpage = 10;
$stmt = $db->prepare("SELECT * FROM table ORDER BY ID DESC LIMIT ?,?");
if ($stmt->execute(array($offset, $rowsperpage))) {
  while ($row = $stmt->fetch()) {
    echo $row['title'];
  }
}

クエリをこれに変更すると問題なく動作しますが、動的であるため、文字列を渡す必要があります。

$stmt = $db->prepare("SELECT * FROM table ORDER BY ID DESC LIMIT 5,10");
if ($stmt->execute(array($offset, $rowsperpage))) {
  while ($row = $stmt->fetch()) {
    echo $row['title'];
  }
}
4

2 に答える 2

4

「遅延実行」はすべてのパラメーターを文字列として扱い、引用符で囲むように感じます。

したがって、配列を execute() に渡す代わりに bind_param を使用して、パラメーターを明示的にバインドします。

またはエミュレーションモードをオフに設定します

$db->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );

接続直後。

とにかく、最初にエラーメッセージに連絡する必要があります。
だから、これを設定する

$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

エラーメッセージが表示されます

于 2013-01-15T14:14:40.023 に答える
0

bind_paramを実行して空白を埋めるのを忘れました

于 2013-01-15T14:16:30.557 に答える