1

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 ビジター ログに似ていますが、そのコード例には load() がなく、唯一の答えはリソース モデルを直接使用することでした。これは必要ではないと思います。

アップデート:

使用している Magento のバージョンは 1.4.1.1 です。完全な例外トレース:

致命的なエラー: /home/dev_fluid/public_html/lib/Zend/Db/Statement/Pdo.php:234 のメッセージ「SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1065 クエリが空でした」というメッセージを含むキャッチされない例外「Zend_Db_Statement_Exception」 : #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): /home/dev_fluid/public_html/lib/Zend/Db/Statement/Pdo.php の 234 行目の Varien_Data_Collect

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}
4

1 に答える 1

0

コードを次のように変更してください。

<?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()場合、これにより完全なトレースが得られます。

そのトレースで問題を特定できない場合は、xdebug、Zend Debug、DBGなどのPHPデバッガーを使用することをお勧めします(IDEがサポートするデバッガーによって異なります)。

メソッドの直前にブレークポイントを設定しload()、コードを1ステップ実行すると、クエリが空である理由がわかります。

于 2012-07-15T09:48:15.553 に答える