2015-05-19 2 views
0

Моей MySQL таблицы «дорожка» имеют следующие два поля:MySQL запросы из PHP возвращают неверные результаты

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

Запуск select * from event_tracks на PHPMyAdmin я получаю результаты правильно.

Когда я делаю это:

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

я как выход «1D», которая является Id и первая буква имени.

Что я делаю неправильно?

EDIT: Исправлено имя базы данных

+0

нигде внутри вашего 'contentRetrieveDataBaseQuery' вы определите' $ result' ... –

+0

@MarcB '$ Result = 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.

Смежные вопросы