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

标签 mysql joomla2.5

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

看来最好的方法是使用 getNumRows()。 Joomla 文档对其使用非常具体:

Miscellaneous Result Set Methods getNumRows()

getNumRows() will return the number of result rows found by the last query and waiting to be read. To get a result from getNumRows() you have to run it after the query and before you have retrieved any results.

我在我的脚本中遵循这一点。第一个查询没有问题,但第二个查询总是抛出警告 - 很可能是因为第二次调用 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]**

最佳答案

我认为这可能是使用 $db->loadRow(); 的问题,因为 getNumRows 依赖于执行的查询。

例如,您可以尝试:

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

还有:

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

虽然我不确定查询和 loadRow 返回的结果之间有何差异。值得尝试并看看这是否有效。

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

关于mysql - 如何在第二次查询后在 Joomla 中使用 getNumRows(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12742482/

相关文章:

php - 在 where 子句中仅选择年份和月份

php - Android MySql 密码验证不起作用

mysql - Phpmyadmin sql 导入错误,Joomla 2.5

php - Json 变量值丢失

php - sql + php 显示具有无限子类别的类别

php - 项目不会从数据库中删除

JavaScript 可以在 1.5 中运行,但不能在 joomla 2.5 中运行

cookies - 为什么我不能在 Joomla 2.5+ 中使用 Jinput 获取 cookie 的值?

joomla - 如何在 Joomla 2.5 文章页面中获取 base_url() ?

joomla2.5 - 如何在joomla 2.5 iframe Modal框中获取joomla编辑器的内容