在 Magento 中加载日志访问者集合时收到“查询为空”错误

Posted

技术标签:

【中文标题】在 Magento 中加载日志访问者集合时收到“查询为空”错误【英文标题】:Receiving "Query was empty" error when loading log visitor collection in Magento 【发布时间】:2012-07-06 17:16:01 【问题描述】:

如何使用 Log/Visitor 模型检索访问者集合?我试过使用下面的代码......

<?php 
error_reporting(E_ALL);
ini_set('display_errors',TRUE);
$root = $_SERVER['DOCUMENT_ROOT'];
require_once $root.'/app/Mage.php';
Mage::app('default');

$visitors = Mage::getModel('log/visitor')->getCollection()->load();
?>

但它返回一个错误,其中的摘录是...

SQLSTATE[42000]: Syntax error or access violation: 1065 Query was empty

在我将 'load()' 方法添加到链中之前,查询不会引发任何错误。我的问题类似于magento visitor logs,但该代码示例缺少 load(),唯一的答案是直接使用资源模型,我认为没有必要。

更新:

正在使用的 Magento 版本是 1.4.1.1。完整的异常跟踪:

致命错误:在 /home/dev_fluid/public_html/lib/Zend/Db/Statement/Pdo.php 中出现消息“SQLSTATE[42000]:语法错误或访问冲突:1065 查询为空”的未捕获异常“Zend_Db_Statement_Exception”: 234 堆栈跟踪:#0 /home/dev_fluid/public_html/lib/Zend/Db/Statement.php(300):Zend_Db_Statement_Pdo->_execute(Array) #1 /home/dev_fluid/public_html/lib/Zend/Db/Adapter/ Abstract.php(468): Zend_Db_Statement->execute(Array) #2 /home/dev_fluid/public_html/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('', Array) #3 /home/dev_fluid/public_html/lib/Varien/Db/Adapter/Pdo/mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('', Array) #4 /home/dev_fluid/public_html/lib/Zend/Db /Adapter/Abstract.php(706): Varien_Db_Adapter_Pdo_Mysql->query(Object(Varien_Db_Select), Array) #5 /home/dev_fluid/public_html/lib/Varien/Data/Collection/Db.php(707): Zend_Db_Adapter_Abstract->fetchAll (对象(Varien_Db_Select),数组)#6 /home/dev_fluid/public_html/lib/Varien/Data/Col lection/Db.php(620): Varien_Data_Collect 在 /home/dev_fluid/public_html/lib/Zend/Db/Statement/Pdo.php 的第 234 行

使用 Jurgen 的 getTraceAsString() 方法的新跟踪:

#0 /home/dev_fluid/public_html/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array) 
#1 /home/dev_fluid/public_html/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array) 
#2 /home/dev_fluid/public_html/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('', Array) 
#3 /home/dev_fluid/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('', Array) 
#4 /home/dev_fluid/public_html/lib/Zend/Db/Adapter/Abstract.php(706): Varien_Db_Adapter_Pdo_Mysql->query(Object(Varien_Db_Select), Array) 
#5 /home/dev_fluid/public_html/lib/Varien/Data/Collection/Db.php(707): Zend_Db_Adapter_Abstract->fetchAll(Object(Varien_Db_Select), Array) 
#6 /home/dev_fluid/public_html/lib/Varien/Data/Collection/Db.php(620): Varien_Data_Collection_Db->_fetchAll(Object(Varien_Db_Select)) 
#7 /home/dev_fluid/public_html/lib/Varien/Data/Collection/Db.php(590): Varien_Data_Collection_Db->getData() 
#8 /home/dev_fluid/public_html/app/code/core/Mage/Log/Model/Mysql4/Visitor/Collection.php(300): Varien_Data_Collection_Db->load(false, false) 
#9 /home/dev_fluid/public_html/andy/visitor.php(11): Mage_Log_Model_Mysql4_Visitor_Collection->load() 
#10 main

【问题讨论】:

您检索访问者集合的代码应该可以正常工作。在此处发布异常跟踪和使用的 Magento 版本可能会有所帮助。 您发布的预期轨迹不完整;缺少整个引导程序(main 等)。 嗨 Jurgen - 请原谅我的无知,但是如何生成相关的调试信息?我目前打开了显示错误,打开了开发者模式并设置了错误/local.xml 文件。 通常你启用的足以获得异常跟踪。看起来您复制/粘贴不完整,或者它以某种方式被切断。 Magento 跟踪的最后三行通常包含Mage.phpindex.phpmain。你的没有。因此,我们无法遵循问题所采用的流程。看看例如http://***.com/q/10907649/693207 查看完整跟踪通常的样子。 嗨@Jürgen Thelen - 我不知道为什么我得到的跟踪不是通常的格式。我什至尝试捕捉错误并使用echo Varien_Debug::backtrace(true, true);,但只是空白。我想我可能不得不放弃了?! 【参考方案1】:

请将您的代码更改为:

<?php 
error_reporting(E_ALL);
ini_set('display_errors',TRUE);
$root = $_SERVER['DOCUMENT_ROOT'];
require_once $root.'/app/Mage.php';
Mage::app('default');

$visitors = Mage::getModel('log/visitor')->getCollection();
try 
    $x = $visitors->load();
    die('no exception');

catch (Exception $e) 
    var_dump($e->getTraceAsString());

如果异常发生在 load() 方法中,这应该会给你一个完整的跟踪。

如果该跟踪无法帮助您确定问题,我建议使用 PHP 调试器,如 xdebug、Zend Debug 或 DBG 等(取决于您的 IDE 支持的调试器)。

load() 方法之前设置断点并单步执行代码应该会给你一个线索,为什么查询是空的。

【讨论】:

我有一个与 OP 非常相似的问题 - 我在自定义扩展控制器的 ./var/report/number 中收到相同的“查询为空”错误,但我粘贴了您的示例代码进行测试。 magento 根目录中的 php 并用我的查询替换它 - 它工作正常。有什么想法吗?

以上是关于在 Magento 中加载日志访问者集合时收到“查询为空”错误的主要内容,如果未能解决你的问题,请参考以下文章

自定义模块的自定义布局不会在 Magento 1.9 中加载

如何在magento 2中加载外部CDN(seat.io)?

如何使用 php-url 路径在 Magento CMS 页面中加载图像背景?

从类别中加载所有产品并按 Magento 中选定的多选属性进行过滤

如何在 Magento 2.3 中加入两个自定义表

在 MySQL 中加载数据 infile 的访问被拒绝