0

そのため、データベースに対して独自のクエリを記述できる領域がありますが、返される結果を制限したいと思います(PhpMyAdminのように)。

したがって$_POST['query']、制限ステートメントがあるかどうかを確認する必要があります。ある場合は、30未満であることを確認してください。制限がない場合は追加する必要があります。

どうすればいいですか?

4

2 に答える 2

4

リスクを無視して…クエリをサブクエリとして利用し、制限をかけるのがベストだと思います。したがって、クエリの評価を避けます。

SELECT * 
FROM (
 SELECT * 
 FROM 'table'
 LIMIT 0 , 100
) AS query

LIMIT 0 , 30
于 2012-11-04T00:13:42.913 に答える
1

関数を使用preg_*してクエリをチェックし、好みの制限を挿入できます。

編集:LIMITキーワードの使用の可能性を完全に無視しました。編集版はこちら。

$query = 'SELECT * FROM aa LIMIT 100,20';
$limit = 20; // predefined max limit

// possibilities:
// LIMIT N[,N]
// LIMIT N OFFSET N

preg_match('~(?<=\blimit\s)\s*(?<limit>\d+)\s*(,\s*\d+|\soffset\s+\d+)?\s*$~i',$query,$limitStr);
if (isset($limitStr['limit'])) {
    $maxLimit = min((int)$limitStr['limit'],$limit);
    // user might have already limited it so this is
    // just to make sure it does not exceed your max.
    $query = preg_replace('~(?<=\blimit\s)\s*\d+\s*(,\s*\d+|\soffset\s+\d+)?\s*$~i',$maxLimit.'$1',$query);
} else $query .= " LIMIT $limit";

echo $query;

出力しますSELECT * FROM aa LIMIT 20,20

于 2012-11-04T00:29:51.900 に答える