gpt4 book ai didi

php - PHP SQLite3Result::fetchArray重新执行查询

转载 作者:行者123 更新时间:2023-12-03 18:59:50 32 4
gpt4 key购买 nike

我在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)都回显模式和字符串相同。我高度怀疑该查询将重新执行,这将非常多余。这是一个错误还是只是我仓促得出结论?

最佳答案

source code的查看表明query提取第一行只是为了确定结果是否为空。第一次调用fetchArray将再次执行查询。
(为了提高效率,或者产生副作用)。

如果您只对一行感兴趣,请使用querySingle

回答您的问题:这按设计工作。而且这种设计是一个错误。

关于php - PHP SQLite3Result::fetchArray重新执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12981332/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com