Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

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!