【发布时间】:2015-05-19 19:10:07
【问题描述】:
我的 MySQL 表“tracks”有这两个字段:
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”,它是 ID 和名称的第一个字母。
我做错了什么?
编辑:更正了数据库的名称
【问题讨论】:
-
在您的
contentRetrieveDataBaseQuery中没有任何地方定义$result... -
@MarcB
$result = db_query($query); -
@camil:提醒我去看验光师...
-
好的,现在我睁开了眼睛,很可能
->fetchAssoc()正在返回单行数据,这意味着$tracks是一个单级数组,而$track['name']正在接受$track 中的字符串值并尝试将其视为字符串,这意味着$foo = 'bar'; echo $foo[1]输出a。 -['name']将被解析为[0]。 -
使用
fetchAll而不是fetchAssoc将所有结果作为一个多维数组。