我使用像查询forsearch函数。当我搜索db中很少的关键字时,一切顺利。但是,当关键字在db中“受欢迎”时,屏幕将显示为空白页。
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);
}
上面的查询有问题吗?为什么它失败了很多结果?
答案 0 :(得分:1)
我的猜测是你的PHP需要很长时间才能根据查询生成结果。您的apache错误日志可能会显示PHP timout错误,因为页面生成页面的时间超过30秒。
尝试将LIMIT设置为更小的值,如10,并查看它是否能够生成页面。
你可以做的另一件事就是在调用时忽略“停用词”,在一种语言中非常常见的“和”,“等”等字样。搜索引擎会这样做,快速搜索会为您提供更多详细信息和停用词列表。
您可以通过在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”这个词也会以构建查询的方式返回“理论”的结果。在不进行REGEX查询的情况下编写代码并不容易。
答案 1 :(得分:0)
空白页出现多少次? php配置文件中max_execution_time指令的值是多少?
如果同时尝试增加此值,或对查询或表格进行一些改进。
答案 2 :(得分:0)
空白页通常表示致命错误,或者可能是解析错误。如果您已将错误日志记录设置为最大值并且仍显示空白页面,请尝试添加 [码] php_value display_errors 1 php_value display_startup_errors 1 [/代码]
到您的.htaccess文件