3

正常に実行される他のPDOステートメントがありますが、これは失敗しています。

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT ?,?' );
$sth->execute( array( 0, 10 ) );

上記は機能しませんが、以下は機能します。

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT 0,10' );
$sth->execute( array( 0, 10 ) );

では、同じ応答が返されるはずなのに、最初の方法で結果が表示されないのはなぜですか?


これが私が今持っているものです

$start = 0;
$perpage = 10;

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT ?,?' );
$sth->bindValue(1, $start, PDO::PARAM_INT);
$sth->bindValue(2, $perpage, PDO::PARAM_INT);
$sth->execute(); 

これも機能しません

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT ?,?' );
$sth->bindParam(1, 0, PDO::PARAM_INT);
$sth->bindParam(2, 10, PDO::PARAM_INT);
$sth->execute();
4

4 に答える 4

3

問題は、PDOが入力を文字列として解釈する可能性があります。あなたが試すことができます

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT :low,:high' );
$sth->bindValue(':low', 0, PDO::PARAM_INT);
$sth->bindValue(':high', 10, PDO::PARAM_INT);
$sth->execute();

または

$low = 0;
$high = 10;
$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT :low,:high' );
$sth->bindParam(':low', $low, PDO::PARAM_INT);
$sth->bindParam(':high', $high, PDO::PARAM_INT);
$sth->execute();

出典:LIMIT句でbindValueメソッドを適用する方法は?

于 2012-09-20T16:12:23.817 に答える
0

これは、「prepare」と配列引数を使用して実行すると、データがデフォルトで文字列であると見なされるためです。したがって、彼らは''でそれらを脱出します。問題は、制限を処理するときに、これらの引用符がエラーをトリガーすることです。解決策はbindValueです

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT :number OFFSET :start' );
$sth->bindValue("number",10, PDO::PARAM_INT);
$sth->bindValue("start",0,PDO::PARAM_INT);
$sth->execute();
于 2012-09-20T16:11:50.667 に答える
0

この質問を見たかどうかはわかりませんが、送信した値をintとしてキャストしてみましたか?

$start = 0;
$perpage = 10;

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT ?,?' );
$sth->bindValue(1, (int)$start, PDO::PARAM_INT);
$sth->bindValue(2, (int)$perpage, PDO::PARAM_INT);
$sth->execute(); 

またはそれはこれを行うように言います:

$start = 0;
$perpage = 10;

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT ?,?' );
$sth->bindValue(1, intval($start), PDO::PARAM_INT);
$sth->bindValue(2, intval($perpage), PDO::PARAM_INT);
$sth->execute(); 
于 2012-09-20T18:08:12.857 に答える
-1

どのデータベースですか?MySQL?SQLサーバー?オラクル?

MySQLではLIMIT、PDOwith句はGlaciesofPacisの投稿のように機能するはずです。ただし、SQL SERVERを使用している場合は、正しい構文を使用していません。StackOverflowの質問から参照:

$query = "
DECLARE @Sort
SET ROWCOUNT :startRow
SELECT @Sort = SortColumn FROM Table ORDER BY SortColumn
SET ROWCOUNT :pageSize
SELECT ... FROM Table WHERE SortColumn >= @Sort ORDER BY SortColumn
";

$dbh->prepare($query);
$sth->bindParam(':startRow',0, PDO::PARAM_INT);
$sth->bindParam(':pageSize',10, PDO::PARAM_INT);
$sth->execute();
于 2012-09-20T17:25:58.960 に答える