Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自PHP的MySQL查询返回不正确的结果_Php_Mysql_Sql_Drupal 7 - Fatal编程技术网

来自PHP的MySQL查询返回不正确的结果

来自PHP的MySQL查询返回不正确的结果,php,mysql,sql,drupal-7,Php,Mysql,Sql,Drupal 7,我的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();

我的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和名称的第一个字母

我做错了什么

编辑:更正了数据库的名称

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

contentRetrieveDataBaseQuery
中,您是否定义了
$result
..@MarcB
$result=db\u query($query)
@camil:提醒我去看我的验光师……好了,现在我的眼睛已经睁开了,很可能是
->fetchAssoc()
返回了一行数据,这意味着
$tracks
是一个单级数组,
$track['name']
将$track中的字符串值作为字符串处理,意思是
$foo='bar';echo$foo[1]
输出
a
-<代码>['name']将被解析为
[0]
。使用
fetchAll
而不是
fetchAssoc
以多维数组的形式获取所有结果。