2016-12-22 2 views
0

Испытание вождения следующего сценария. php 5.3.3. mysql 5.0.95.php foreach 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'; 
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>'; 
?> 

выход Браузер:

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 цикл появляется, чтобы выйти через пять проходов. В браузере нет сообщений об ошибках. Не похоже, что скрипт был прерван. Print_r показывает 49 строк в массиве. Я пробовал различный порядок сортировки в запросе на случай, когда некоторые данные антагонизируют цикл. Тот же результат: пять записей. Запрос занимает 0,62 секунды. Colons in output являются частью полей исходной текстовой файловой архитектуры, которые нужно будет анализировать в цикле foreach, как только он будет проходить через все строки. Stumped.

+1

Вы можете использовать цикл while вместо foreach? –

+0

mysqli_query возвращает объект результата mysqli. Вы выполняете итерацию через этот объект/класс, а не через сам результат! – Jeff

ответ

2

Класс mysqli_result не не выполнил Traversable до PHP 5.4. В PHP 5.3 вам нужно будет использовать цикл while.

<?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>'; 
?> 
+0

Perfectamundo. (Я слышал это слово задолго до того, как были изобретены хипстеры) – dirk

0

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

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

Ditto комментарий выше. – dirk

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