第二次查询后如何在Joomla中使用getNumRows()

Dzs*_*eti 2 mysql joomla2.5

我正在Joomla环境中开发一个php脚本,该脚本两次查询相同的表/数据库。每次我需要知道是否找到任何匹配项。

似乎最好的方法是使用getNumRows()。Joomla文档的用法非常具体:

其他结果集方法getNumRows()

getNumRows()将返回上一个查询找到并等待读取的结果行数。要从getNumRows()获得结果,必须在查询之后和检索任何结果之前运行它。

我在脚本中遵循了这一要求。在第一个查询中没有问题,但是第二个查询始终引发警告-很可能是因为第二次getNumRows()调用是在从第一个查询中检索到结果之后-不符合Joomla要求。

任何想法如何解决?非常感谢!

我有问题的脚本的部分内容为:

$db = JFactory::getDBO();
$query = "SELECT * FROM #__art_mobiles WHERE user_agent_header='$ua'";
$db->setQuery($query);
$rowsAG = $db->getNumRows();
$replyAG = $db->loadRow();

if ($rowsAG == 0) {

//if no match check www.handsetdetection.com
//see https://www.handsetdetection.com/properties/vendormodel for current list of models in database together with headers
echo "not in local database - try external<br/>";  
$prod = '';

if ($hd3->siteDetect()) {

    $replyHD = $hd3->getReply();

    $man = $replyHD['hd_specs']['general_vendor'];
    $dev = $replyHD['hd_specs']['general_model'];
    $os = $replyHD['hd_specs']['general_platform'];
    echo "found in handsetdetection.com database<br/>";

    //check for provisional match in local database
    $query = "SELECT * FROM #__art_mobiles WHERE manufacturer='$man' AND device='$dev'";
    $db->setQuery($query);
    $rowsAGprov = $db->getNumRows();
    $replyAGprov = $db->loadRow();

    if ($rowsAGprov == 0) { **[ETC]**
Run Code Online (Sandbox Code Playgroud)

Mat*_*ern 5

我认为使用$db->loadRow();as可能getNumRows依赖于已执行的查询。

例如,您可以尝试:

$db = JFactory::getDBO();
$query = "SELECT * FROM #__art_mobiles WHERE user_agent_header='$ua'";
$db->setQuery($query);
$replyAG = $db->query();
$rowsAG = $db->getNumRows();
Run Code Online (Sandbox Code Playgroud)

和:

$query = "SELECT * FROM #__art_mobiles WHERE manufacturer='$man' AND device='$dev'";
$db->setQuery($query);
$replyAGprov = $db->query();
$rowsAGprov = $db->getNumRows();
Run Code Online (Sandbox Code Playgroud)

尽管我不确定查询和loadRow返回的结果之间有什么区别。值得尝试一下,看看是否可行。

或者,如果仅getNumRows用于查看记录是否存在,则可以对$replyAG变量进行某种检查。如果没有结果,再次尝试看看loadRow返回什么可能是值得的。