Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

PHP Integrating PHP with Databases Querying the Database with PHP Working with Results

Dan Boswell
Dan Boswell
2,570 Points

PDO fetchAll not passing correct values to function

This is the challenge I've been set. I'm either doing something wrong or just not understanding the question. Please help.

The company you work for wants to send an email to its member base. They want the email to contain a complementary offer based on their membership level. We've included a helper.php file that contain the connection to the database and give us a PDO object $db to use. This helper file also contains a function to send_offer. The send_offer function accepts the following arguments: $member_id, $email, $fullname, $level In the current file, we've included the query to select the required items from the database. The results of the database query are stored in a PDOStatement object named $results. Loop through those results and pass them to the send_offer function.

index.php
<?php
include "helper.php";

try {
    $results = $db->query(
        "SELECT member_id, email, fullname, level FROM members"
    );
} catch (Exception $e) {
    echo $e->getMessage();
}
//add code below this line



foreach ($results->fetchAll(PDO::FETCH_ASSOC) as $thing) {
  $member_id = $thing['member_id'];
  $email = $thing['email'];
  $fullname = $thing['fullname'];
  $level = $thing['level'];
}

send_offer($member_id, $email, $fullname, $level);

2 Answers

Justin Radcliffe
Justin Radcliffe
18,987 Points

Hey Dan, you almost have it correct as is - you just need to include the send_offer() function INSIDE the foreach loop. As you have it currently, you're only initializing the function once (for the last array item) rather than for each item in the array.

Dan Boswell
Dan Boswell
2,570 Points

Hi Justin,

Thank you so much. I was bashing my head against a wall trying to figure this out. I can't believe how close I was!

Thanks again!