gpt4 book ai didi

php - 导致大量输出的mysql查询使php页面变为空白

转载 作者:行者123 更新时间:2023-11-29 00:57:50 25 4
gpt4 key购买 nike

我使用类似查询的搜索功能。当我搜索数据库中很少的关键字时,一切顺利。但是当关键字在 db 中是“popular”时,屏幕会变成空白页。

function dbSearch($q) //$q is array of keywords
{

global $mainframe, $option;

$db =& JFactory::getDBO();

$str = implode("%' AND text LIKE '%", $q);
$str = str_replace("AND text LIKE '%-", "AND text NOT LIKE '%", $str);

$lim = $mainframe->getUserStateFromRequest("$option.limit", 'limit', 100, 'int');
$lim0 = JRequest::getVar('limitstart', 0, '', 'int');
$query = "SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE type=4 AND text LIKE '%".$str."%' ORDER BY ref ASC";

$db->setQuery( $query );
$rows = $db->loadObjectList();
$count = count($rows);

if ($db->getErrorNum())
{
echo $db->stderr();
return false;
}

$db->setQuery('SELECT FOUND_ROWS();');
jimport('joomla.html.pagination');
$pageNav = new JPagination( $db->loadResult(), $lim0, $lim );

HTML_output::showFoundResults($rows, $pageNav, $count);
}

上面的查询有问题吗?为什么它在很多结果上都失败了?

最佳答案

我的猜测是您的 PHP 需要很长时间才能根据查询生成结果。您的 Apache 错误日志可能会显示 PHP 超时错误,因为页面生成时间超过 30 秒。

尝试将 LIMIT 设置为更小的值,例如 10,看看它是否能够生成页面。

您可以做的另一件事是跳过所谓的“停用词”,例如“and”、“the”等在语言中非常常见的词。搜索引擎执行此操作,快速搜索将为您提供更多详细信息和停用词列表。

您可以通过在 phpMyAdmin 等工具中运行查询来查看执行查询需要多长时间。

SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE type=4 AND text LIKE '%jabberwocky%' ORDER BY ref ASC";

相比于

SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE type=4 AND text LIKE '%the%' ORDER BY ref ASC";

在同一个查询工具中,如果您在查询前面加上“EXPLAIN”,MySQL 将返回完成查询所必须执行的所有操作的列表。

需要注意的一点是,搜索“the”一词也会返回“theory”的结果,这与您的查询构造方式相同。不使用 REGEX 查询就编写代码不是件容易的事。

关于php - 导致大量输出的mysql查询使php页面变为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5167984/

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