PHPのREGEXPキーワードに関数をアタッチしましたが、SQLite3Result::fetchArrayがクエリを再実行することを発見しました。なんて非効率なんだ!
function _sqliteRegexp($pattern, $string)
{
echo $pattern . ' - ' . $string . '<br/>';
return preg_match('/' . $pattern . '/', $string);
}
$handle = new SQLite3($filename);
$handle->createFunction('regexp', '_sqliteRegexp', 2);
// (1)
$result = $handle->query("SELECT * FROM pages WHERE '" . $request_uri . "' REGEXP request LIMIT 1;");
// (2)
$result->fetchArray();
与える、例えば:
(1)
\/ - /admin/settings/1
\/sqlite - /admin/settings/1
\/admin - /admin/settings/1
\/admin\/logout - /admin/settings/1
\/admin\/settings(\/[0-9]+)? - /admin/settings/1
(2)
\/ - /admin/settings/1
\/sqlite - /admin/settings/1
\/admin - /admin/settings/1
\/admin\/logout - /admin/settings/1
\/admin\/settings(\/[0-9]+)? - /admin/settings/1
(1)と(2)はどちらもパターンをエコーし、まったく同じように弦を張ります。クエリが再実行されたのではないかと思いますが、これは非常に冗長です。これはバグですか、それとも私が急いで結論を出しているだけですか?