2013-12-11 50 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查询将返回该表中的每一列。