Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP SQLite3Result::fetchArray重新执行查询_Php_Sqlite - Fatal编程技术网

PHP SQLite3Result::fetchArray重新执行查询

PHP SQLite3Result::fetchArray重新执行查询,php,sqlite,Php,Sqlite,我在PHP中为REGEXP关键字附加了一个函数,发现SQLite3Result::fetchArray重新执行查询!多么低效 function _sqliteRegexp($pattern, $string) { echo $pattern . ' - ' . $string . '<br/>'; return preg_match('/' . $pattern . '/', $string); } $handle = new SQLite3($filename);

我在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)和(2)的模式和字符串完全相同。我高度怀疑查询被重新执行,这将是非常多余的。这是一个bug还是只是我在匆忙总结?

查看显示
query
获取第一行只是为了确定结果是否为空。对
fetchArray
的第一次调用将再次执行查询。 (效率和副作用就到此为止。)

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

回答你的问题:这是设计好的。这种设计是一个bug。

检查Havalite上的“sqlite_regExp”方法:

工作也有限制:

if($rows = sqlite_regExp("SELECT * FROM myTable WHERE preg_match('/sql(lite)*/ui', myRow) LIMIT 1")){
    foreach($rows as $row) echo $row[0];
}

使用
限制3
调用多少次?限制没有影响。它只是使查询提前停止,而不是遍历整个表。我已经修改了我的帖子,这是完全不相关的。问题不是将正则表达式功能附加到SQL,而是查询执行了两次。这是我通过使用自定义正则表达式函数发现的。。
if($rows = sqlite_regExp("SELECT * FROM myTable WHERE preg_match('/sql(lite)*/ui', myRow) LIMIT 1")){
    foreach($rows as $row) echo $row[0];
}