2013-12-11 51 views
0

我運行Magento的1.7.0.2:Magento的SQL語句不返回預期的結果

我試圖使用PHP & SQL自定義表中檢索所有列,但返回的結果是不是我所期待或通常會得到:

$connection = $this->_getConnection('core_read'); 
$sql = "SELECT * FROM " . $this->_getTableName('my_custom_table_name') . " cped 
     WHERE cped.id = ?"; 
$results = $connection->fetchOne($sql, array($id)); 
print_r($results); //this only prints out a single value 

public function _getConnection($type = 'core_read'){ 
    return Mage::getSingleton('core/resource')->getConnection($type); 
} 

public function _getTableName($tableName){ 
    return Mage::getSingleton('core/resource')->getTableName($tableName); 
} 

的問題是,這只是返回第一個欄(即在這種情況下,ID),即使我用

Select * 

聲明,其中U sually工作得很好。巧合的是,如果我嘗試使用指定我感興趣的列名:

Select id, name, sku, custom_value 

它只返回第一個值,故取其專欄中,我指定第一個是它返回的值。

如果我嘗試在PHPMyAdmin中運行這個相同的語句,它會完美地返回預期的結果。有任何想法嗎?

+0

什麼是'array($ id)'?你在這裏通過什麼。 – Roopendra

+0

這個實例中的'$ id'是表的主鍵,它被'array()'包圍,因爲通常在那裏爲'WHERE,ORDER BY'等解析了幾個值,儘管在這種情況下它可以被排除在外。 在不使用'array()'的情況下運行它將返回相同的結果。 – Moose

+0

謝謝@moose。這對我來說是新事物。這就是爲什麼我要求你 – Roopendra

回答

4

這就是fetchOne所做的。它獲得了第一個記錄。請注意函數名稱中的One
嘗試使用fetchAll

+0

謝謝Marius,'fetchAll'確實可以做到這一點!奇怪的是,fetchOne通常會爲我提取整個記錄,即我仍然可以訪問任何包含記錄的列,但在這種情況下,儘管它僅限於一列。任何想法可能會導致該行爲? – Moose

+1

對不起,沒有想法。但我有一個指針。不要使用直接的sql語句從表中獲取數據。結合'load()'方法使用模型。這更安全。 – Marius

+0

感謝Marius的提示,但是我使用直接語句的原因是由於數據大小的性質,使用帶'read_only'的SQL允許我比使用ORM更快地分析數據。這一個真的讓我感到困惑,謝謝,雖然,欣賞輸入! – Moose

0

原來我誤認爲直接SQL語句的功能fetchOne確實只會從語句中提取一列結果,fetchRow查詢將返回該表中的每一列。