1
これをPDOとSQLサーバーで簡単に実行しましたが、一般的なクエリで正しく動作するように苦労しています。 MySQLのテーブルでこれを再利用できるようにしたいので、ここで私は助けを求めています。正しいページングの総行数と行数
だから私はPDOのためにそれを使用する方法とSQLサーバー
function pagedQuery($dbh,$q,$sort,$offset,$limit,$params = array()) {
$limit = preg_replace("/[^0-9]]/","",$limit);
$offset = preg_replace("/[^0-9]]/","",$offset);
$q = preg_replace("/^[^\w]*SELECT/i","SELECT COUNT(*) OVER() as num_rows, ROW_NUMBER() OVER(ORDER BY $sort) AS rownum,",$q);
$q = "SELECT * FROM (".$q.") as pagingTable WHERE rownum > $offset AND rownum <= ($offset+$limit)";
## Prepare Query
$stmt = $dbh->prepare($q);
try {
$stmt->execute($params);
} catch(PDOException $e) {
print $e->getMessage();
}
## Return Results
return $stmt->fetchAll();
は今、明らかにOVER機能が存在し、MySQLとこれを変更する必要がありません。ここでは新しいバージョンで私の試みです:
function mysqlPagedQuery($dbh,$q,$table,$sort,$offset,$limit,$params = array()) {
$limit = preg_replace("/[^0-9]]/","",$limit);
$offset = preg_replace("/[^0-9]]/","",$offset);
$q = preg_replace("/^[^\w]*SELECT/i","SELECT (SELECT COUNT(*) as num_rows FROM ".$table.") AS num_rows, @rowN := @rowN + 1 AS rownum,",$q);
$q = "SELECT * FROM (".$q.") as pagingTable WHERE rownum > $offset AND rownum <= ($offset+$limit)";
## Prepare Query
$stmt = $dbh->prepare($q);
try {
$query = $dbh->query("set @rowN = 0;");
$stmt->execute($params);
} catch(PDOException $e) {
print $e->getMessage();
}
## Return Results
return $stmt->fetchAll();
は今、この「仕事」は、あなたがそれを表に出すことを考えるだろうが、私はすぐのWHERE句のすべてを与えられない限り、NUM_ROWSが正しい値を返さないことに気づきましたそれに送られたクエリ私はそれを非効率的な方法で解析しなければならないでしょう。私は、これを行うより簡単な方法があると感じています。
** WARNING **://:PDOを使用するときは、[プリペアドステートメント](HTTPを使用する必要がありますphp.net/manual/en/pdo.prepared-statements.php)をプレースホルダ値で置き換えて、ユーザデータを別々の引数として提供します。このコードでは、重大な[SQLインジェクションのバグ](http://bobby-tables.com /)文字列の補間や連結を使用せず、代わりに[prepared statements](http://php.net/manual/en/pdo.prepared-statements.php)を使用し、 '$ _POST'や' $ _GET'データを絶対に入れないでくださいPHPの正しい方法(http://www.phptherightway.com/)を参照してください。 – tadman
これを正しく読んでいるかわかりません。 Microsoft SQL Server用のものをMySQL用に変換していますか? – tadman
おそらく限界とオフセットを調べます。 [これのような多分](http://www.petefreitag.com/item/451.cfm) – bobkingof12vs