2015-05-19 91 views
0

我的MySQL表“轨道”有这两个领域:MySQL查询返回不正确的结果

Id (Int) 
Name (Varchar 255) 

的值是:

1 Day 1 
2 Day 2 
3 Day 3 

我试图使用从PHP检索所有曲目此功能:

function getTracks() { 
    $query = sprintf('select * from tracks'); 
    return contentRetrieverDataBaseQuery($query)->fetchAssoc(); 
} 

function contentRetrieverDataBaseQuery($query) { 
    $settings = contentRetrieverGetSettings(); 
    Database::addConnectionInfo('contentRetriever', 'default', $settings['database_connection']); 
    db_set_active('contentRetriever'); 
    $result = db_query($query); 
    db_set_active(); 
    return $result; 
} 

对phpmyadmin运行select * from event_tracks我得到的结果是否正确。

当我这样做:

$tracks = getTracks(); 
foreach ($tracks as $track) { 
    echo $track['name']; 
} 

我得到作为输出“1D”,这是标识和名称的第一个字母。

我在做什么错?

编辑:更正数据库

+0

无处里面你'contentRetrieveDataBaseQuery'你定义'$ result' ... –

+0

@MarcB'$结果= db_query($查询);' – Keelan

+0

@camil:提醒我去看看我的验光师...... –

回答

1

->fetchAssoc()的名字总是返回查询结果单排,也就是说你的阵列是一个单一的记录,你的循环将投入该行的字符串值到$track。然后,使用$track,如果它是一个数组,产生下面的代码相当于:

$arr = array('abc', 'def'); // your one row of query results. 
foreach($arr as $value) { 
    // $value is now 'abc'; 
    echo $value['name']; // parsed/executed as $value[0]; 
    // output is 'a' 
} 

字符串可以作为一个字符数组,这就是为什么PHP没有抱怨$tracks['name']处理。它只是简单地将['name']视为使用非数字数组索引的愚蠢尝试,并将其转换为0