Я пытаюсь перебрать некоторые данные из моей базы данных, но он выводит их дважды.php foreach looping дважды
$fields = 'field1, field2, field3, field4';
$idFields = 'id_field1, id_field2, id_field3, id_field4';
$tables = 'table1, table2, table3, table4';
$table = explode(', ', $tables);
$field = explode(', ', $fields);
$id = explode(', ', $idFields);
$str = 'Egg';
$i=0;
while ($i<4) {
$f = $field[$i];
$idd = $id[$i];
$sql = $writeConn->select()->from($table[$i], array($f, $idd))->where($f . " LIKE ?", '%' . $str . '%');
$string = '<a title="' . $str . '" href="' . $currentProductUrl . '">' . $str . '</a>';
$result = $writeConn->fetchAssoc($sql);
foreach ($result as $row) {
echo 'Success! Found ' . $str . ' in ' . $f . '. ID: ' . $row[$idd] . '.<br>';
}
$i++;
}
Выведение:
Успех! Найдено яйцо в поле3. ID: 5.
Успех! Найдено яйцо в поле3. ID: 5.
Может кто-нибудь объяснить, почему он перебирает как индексированные, так и ассоциативные значения?
UPDATE
Я сделал несколько больше играть вокруг и попытался следующее.
$fields = 'field1, field2, field3, field4';
$idFields = 'id_field1, id_field2, id_field3, id_field4';
$tables = 'table1, table2, table3, table4';
$table = explode(', ', $tables);
$field = explode(', ', $fields);
$id = explode(', ', $idFields);
$str = 'Egg';
$i=0;
while ($i<4) {
$f = $field[$i];
$idd = $id[$i];
$sql = $writeConn->select()->from($table[$i], array($f, $idd))->where($f . " LIKE ?", '%' . $str . '%');
$string = '<a title="' . $str . '" href="' . $currentProductUrl . '">' . $str . '</a>';
$sth = $writeConn->prepare($sql);
$sth->execute();
$result = $sth->fetch(PDO::FETCH_ASSOC);
foreach ($result as $row) {
echo 'Success! Found ' . $str . ' in ' . $f . '. ID: ' . $row[$idd] . '.<br>';
}
$i++;
}
Самое интересное, что это выводит ниже:
Успех! Найдено яйцо в поле3. ID: E.
Успех! Найдено яйцо в поле3. ID: E.
Успех! Найдено яйцо в поле3. ID: 5.
Успех! Найдено яйцо в поле3. ID: 5.
Успех! Найдено яйцо в поле3. ID: E.
Успех! Найдено яйцо в поле3. ID: E.
Успех! Найдено яйцо в поле3. ID: 5.
Успех! Найдено яйцо в поле3. ID: 5.
Я также попытался добавить $i
к выходу, и это выводит 2
, как ожидалось. Если изменить fetch(PDO::FETCH_BOTH)
на fetch(PDO::FETCH_ASSOC)
выход следующим образом:
успеха! Найдено яйцо в поле3. ID: E.
Успех! Найдено яйцо в поле3. ID: E.
Успех! Найдено яйцо в поле3. ID: 5.
Успех! Найдено яйцо в поле3. ID: 5.
Это слишком долго искажало меня, поэтому, если бы кто-нибудь мог помочь, я был бы очень благодарен!
добавив значение $ я на выходе может помочь все ясно. и не должен начинаться с 0? –
Возможно, результат запроса похож на левое соединение и возвращает тот же элемент для каждого элемента объединения. – albanx
у вас есть повторяющаяся строка? Что делает этот запрос в phpMyAdmin (или аналогичном инструменте администратора db)? –