PDOクラスを拡張して、プリペアドステートメントのクエリーストリングを操作する関数を追加します。たとえば、クエリを検索可能にするか、ページネーションを追加します。例えばPDOでプリペアドステートメントのクエリーストリングを変更する
:
$documents_query = $DB->prepare("SELECT id, title, file_name, datetime_added
FROM documents
ORDER BY datetime_added DESC");
$documents_query->paginate($page_number, RESULTS_PER_PAGE);
は、質問は(読み取り専用である)クエリ文字列を変更して保存する方法ですので、後で実行することができますか?ステートメントが準備されたら
class CustomStatement extends PDOStatement
{
public function paginate($current_page, $max_results)
{
// Add SQL_CALC_FOUND_ROWS so we can count the total amount of results
$select_index = stripos($this->queryString, 'SELECT');
$statement = substr_replace($this->queryString, 'SELECT SQL_CALC_FOUND_ROWS', $select_index, 6);
// Add LIMIT to the end of the query
$start_limit = ($current_page - 1) * $max_results;
$statement = $statement . ' LIMIT ' . $start_limit . ', ' . $max_results;
// What to do here?
return $this->prepare($statement);
}
}
'paginate'はあなたの新しい' prepare'ですか? – hakre
それは意図されていません。別のクエリを実行する場合は、新しいプリペアドステートメントハンドルを作成する必要があります。 – mario
私はおそらく、あなたは準備文を理解していないと思います。準備されたステートメントはサーバーに送信され、サーバーはデータを保持し、データの挿入と実行を待ちます。準備が整ったら、mySQLサーバーにはそれがあります。もう何もできません。 – Erik