2012-06-05 4 views
1

Я использую функцию для извлечения нескольких строк из базы данных mysql. Я использую foreach для прохождения каждого совпадения. Я хочу, чтобы я мог добавить id каждой строки в массив и вернуть массив обратно вызывающей программе, чтобы затем использовать идентификаторы.PDO, MySQL - Как вернуть массив из функции?

Это насколько я пытался получить, я иду в правильном направлении?

$resultarray = array(); 
    $resultarray[] = get_post_data($post_id); 

    print_r($resultarray); 

код в функции:

$stmt = $dbh->prepare("SELECT * FROM mjbox_images JOIN mjbox_posts USING (post_id) WHERE post_id = ?"); 
     $stmt->bindParam(1,$post_id); 
     $stmt->execute(); 

     $resultarray = array(); 
     foreach($stmt as $row): 


       $resultarray[] = $img_id = $row['img_id']; 


     endforeach; 
     return $resultarray; 

Благодаря

ответ

1

Вы должны использовать:

while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { 

} 

Вместо для цикла. Вам также настоятельно рекомендуется использовать {и} для таких вещей, как циклы :)

1

Если вам просто нужно поле img_id, то почему вы работаете select *?

$stmt = $dbh->prepare("SELECT img_id FROM mjbox_images JOIN mjbox_posts USING (post_id) WHERE post_id = ?"); 
$stmt->bindParam(1,$post_id); 
$stmt->execute(); 

return $stmt->fetchAll(); 

В качестве альтернативы вы могли бы перебрать результатов вручную (для проверки/изменить синтаксис возврата массива) с:

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    //code 
} 
+0

на самом деле мне нужно несколько бит данных, но хотел сделать пример проще всего с помощью img_id. Как получить каждый набор данных в свой собственный ключ в массиве? – crm

+0

@crm с помощью 'PDOStatement :: fetchAll()'? Вы можете использовать 'PDO :: FETCH_COLUMN' в качестве типа выборки для' PDOStatement :: fetchAll() ', который дает вам то, что [я думаю] вы ищете. Хотя, если вы планируете вручную перебирать результаты, я бы держался подальше от fetchAll и использовал fetch, как указано выше – orourkek

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