我正在 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]**