Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как вывести 2 идентичных sql запроса в foreach?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
arimanecro
Отправлено: 15 Сентября, 2016 - 11:52:59
Post Id



Частый гость


Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Был удивлен, что в цикле, если сделать 2 идентичных запроса, то второй проигнорится, вернее вторая итерация пройдет, но значения из sql запроса не подставятся.

Например:

PHP:
скопировать код в буфер обмена
  1. $arr =['0' => '1', '1'=>'1']; // одинаковые значения
  2.  
  3. foreach($arr as $k => $v) {
  4.  
  5. $result = Db::$dbh->query("SELECT title FROM table WHERE id = $v");
  6. $items = $result->fetchAll();
  7. echo "<p>$items[title]</p>";
  8. }


Выводятся два параграфа, но только в первом подставлено значение title.
С чем это связано и как сделать, чтобы выводилось два запроса?
 
 Top
Sail
Отправлено: 15 Сентября, 2016 - 13:21:17
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




arimanecro пишет:
$items[title]

Какое значение ожидается от константы title?
 
 Top
arimanecro
Отправлено: 15 Сентября, 2016 - 13:34:15
Post Id



Частый гость


Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




а чего Вы взяли, что title это константа? )
 
 Top
difight
Отправлено: 15 Сентября, 2016 - 14:05:42
Post Id



Посетитель


Покинул форум
Сообщений всего: 355
Дата рег-ции: Нояб. 2011  


Помог: 3 раз(а)




А собственно зачем тут миллион запросов делать если можно 1 обойтись
 
My status
 Top
arimanecro
Отправлено: 15 Сентября, 2016 - 14:16:04
Post Id



Частый гость


Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




difight

пробовал, но если закидываешь два одинаковых значений WHERE ID IN (1, 1) то вернет одну строку, а надо две
 
 Top
Строитель Модератор
Отправлено: 15 Сентября, 2016 - 14:26:28
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 74 раз(а)




arimanecro, вроде бы всё верно - что вы попросили, то вам база и вернула. В table может храниться только одно поле title, у которого id будет равен единице. Ну а раз значение возвращается одно, то и итераций в цикле будет столько же.
 
 Top
arimanecro
Отправлено: 15 Сентября, 2016 - 14:36:45
Post Id



Частый гость


Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Строитель

ну так я делаю через ПХП-шный цикл два независимых запроса. а не через обращение внутри БД к ним. (это я НЕ про WHERE ID IN (1, 1))

(Отредактировано автором: 15 Сентября, 2016 - 14:38:14)

 
 Top
difight
Отправлено: 15 Сентября, 2016 - 14:48:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 355
Дата рег-ции: Нояб. 2011  


Помог: 3 раз(а)




arimanecro пишет:
difight

пробовал, но если закидываешь два одинаковых значений WHERE ID IN (1, 1) то вернет одну строку, а надо две

Тем более зачем делать два одинаковых запроса к базе. Сделайте 1 запрос соберите все данные в массив, а дальше выводите данные из массива сколько нужно раз.
 
My status
 Top
arimanecro
Отправлено: 15 Сентября, 2016 - 15:03:07
Post Id



Частый гость


Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Цитата:
Тем более зачем делать два одинаковых запроса к базе.


да хотя бы для той же корзины. Когда в корзине два одинаковых товара, но с разными атрибутами, например в красном и зеленом варианте.

Чтобы вывести то же фото и название, надо обраиться к БД
 
 Top
Sail
Отправлено: 15 Сентября, 2016 - 15:25:47
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




arimanecro, покажите, пожалуйста, результат var_dump($items).
 
 Top
arimanecro
Отправлено: 15 Сентября, 2016 - 15:55:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Sail

спс, за наводку )

Опять наступил на те же грабли, который раз...

Вообщем проблема была в следующем:

Поскольку я сделал сокращенный вариант кода, то сделал ошибку в



в оригинале я выводил так:

PHP:
скопировать код в буфер обмена
  1. echo "<p>$items[$k][title]</p>"; // был индекс [$k]


а в $items = $result->fetchAll(); результат хранится всегда в нулевом индексе, поэтому когда приходила единица и выше, то естественно он ничего не видел.

Вместо $k надо тупо оставлять ноль:

PHP:
скопировать код в буфер обмена
  1. echo "<p>$items[0][title]</p>";


ну вот и все работает, одинаковые запросы в цикле, обрабатываются как надо Улыбка

(Отредактировано автором: 15 Сентября, 2016 - 15:57:09)

 
 Top
Sail
Отправлено: 15 Сентября, 2016 - 16:16:24
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




arimanecro, возьмите всё-таки нечисловой индекс массива в кавычки, иль апострофы.
Зачем лишние "Notice: Use of undefined constant"?!
 
 Top
arimanecro
Отправлено: 15 Сентября, 2016 - 16:49:49
Post Id



Частый гость


Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Sail

Цитата:
возьмите всё-таки нечисловой индекс массива в кавычки, иль апострофы.


Вы про $items[title]?

эммм...так это вообще-то запрещает синтаксис, если как вы предлагаете сделать:



то будет ошибка:

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)

Можно для удобства воспользоваться фигурными скобками, чтобы не вводить в заблуждение, константа это или нет:

 
 Top
Строитель Модератор
Отправлено: 15 Сентября, 2016 - 16:52:04
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 74 раз(а)




arimanecro пишет:
в оригинале я выводил так:
Надо было оригинал сюда сразу скопировать, и всё стало бы ясно.
(Добавление)
arimanecro пишет:
так это вообще-то запрещает синтаксис
Лучше так
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB