0

Test driving the following script. php 5.3.3. mysql 5.0.95.

    <?php 
// show errors in browser
error_reporting(E_ALL);
ini_set('display_errors', 'on');
// connect to database
$conn = mysqli_connect('xxx', 'xxx', 'xxx', 'xxx');
if (!$conn) {
    die("connection failed: " . mysqli_connect_error());
}
$company_request = 'xxx';
$employee_request = 'xxx';
$timecard_data_results = array();
$fill_old_data_array_def = " SELECT company_id, employee_id, location, task_name, task_start_time, task_end_time, tccomment FROM timecard WHERE company_id = '" . $company_request . "' AND employee_id = '" . $employee_request . "' ORDER BY task_start_time";
$timecard_data_results = mysqli_query($conn, $fill_old_data_array_def);
$iteration = '1';
foreach ($timecard_data_results as $timecard_record) {
    $timecard_record = mysqli_fetch_assoc($timecard_data_results);
    echo $timecard_record['company_id'] . $timecard_record['task_name'] . $timecard_record['task_start_time'];

    echo "  " . $iteration . "<br>";
    $iteration = $iteration + '1';
}
echo "<br>" . $iteration . "<br>";
echo '<pre>';
print_r($timecard_data_results);
echo '</pre>';
?>

Browser output is:

HOSCS:Train Crew:Engineer trainin 2016-10-14 07:00:00 1
HOSCS:Train Crew:Engineer in trai 2016-10-16 10:00:00 2
HOSCS:Train Crew:Engineer in trai 2016-10-17 07:30:00 3
HOSCS:Train Crew:Engineer in trai 2016-10-18 08:15:00 4
HOSCS:Train Crew:Engineer in trai 2016-10-19 09:45:00 5

6
mysqli_result Object
(
    [current_field] => 0
    [field_count] => 7
    [lengths] => Array
        (
            [0] => 3
            [1] => 6
            [2] => 21
            [3] => 31
            [4] => 19
            [5] => 19
            [6] => 1
        )

    [num_rows] => 49
    [type] => 0
)

Foreach loop appears to quit after five passes. No error messages in browser. Does not appear that script was aborted. Print_r shows 49 rows in the array. I've tried different sort order in the query on the chance some data was antagonizing the loop. Same result: Five records. Query takes .062 seconds. Colons in output are part of fields from original text file architecture that will need to be parsed in foreach loop once it will run through all rows. Stumped.

2
  • 1
    can you please use while loop instead of foreach? Commented Dec 22, 2016 at 17:00
  • mysqli_query returns a mysqli result object. You are iterating through that object/class, not through the result itself! Commented Dec 22, 2016 at 17:03

2 Answers 2

2

The mysqli_result class didn't implement Traversable until PHP 5.4. In PHP 5.3 you will need to use a while loop.

<?php 
// show errors in browser
error_reporting(E_ALL);
ini_set('display_errors', 'on');
// connect to database
$conn = mysqli_connect('xxx', 'xxx', 'xxx', 'xxx');
if (!$conn) {
    die("connection failed: " . mysqli_connect_error());
}
$company_request = 'xxx';
$employee_request = 'xxx';
$timecard_data_results = array();
$fill_old_data_array_def = " SELECT company_id, employee_id, location, task_name, task_start_time, task_end_time, tccomment FROM timecard WHERE company_id = '" . $company_request . "' AND employee_id = '" . $employee_request . "' ORDER BY task_start_time";
$timecard_data_results = mysqli_query($conn, $fill_old_data_array_def);
$iteration = '1';

while($timecard_record = mysqli_fetch_assoc($timecard_data_results))
    echo $timecard_record['company_id'] . $timecard_record['task_name'] . $timecard_record['task_start_time'];

    echo "  " . $iteration . "<br>";
    $iteration = $iteration + '1';


}
echo "<br>" . $iteration . "<br>";
echo '<pre>';
print_r($timecard_data_results);
echo '</pre>';
?>
Sign up to request clarification or add additional context in comments.

1 Comment

Perfectamundo. (I heard this word long before hipsters were invented)
0

You should use

while($timecard_record = mysqli_fetch_assoc($timecard_data_results))
{
echo $timecard_record['company_id'] . $timecard_record['task_name'] .$timecard_record['task_start_time'];
echo "  " . $iteration . "<br>";
$iteration++;
}

1 Comment

Ditto comment above.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.