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
Форумы портала PHP.SU :: Версия для печати :: Как вывести 2 идентичных sql запроса в foreach?
Форумы портала PHP.SU » » Вопросы новичков » Как вывести 2 идентичных sql запроса в foreach?

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

1. arimanecro - 15 Сентября, 2016 - 11:52:59 - перейти к сообщению
Был удивлен, что в цикле, если сделать 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.
С чем это связано и как сделать, чтобы выводилось два запроса?
2. Sail - 15 Сентября, 2016 - 13:21:17 - перейти к сообщению
arimanecro пишет:
$items[title]

Какое значение ожидается от константы title?
3. arimanecro - 15 Сентября, 2016 - 13:34:15 - перейти к сообщению
а чего Вы взяли, что title это константа? )
4. difight - 15 Сентября, 2016 - 14:05:42 - перейти к сообщению
А собственно зачем тут миллион запросов делать если можно 1 обойтись
5. arimanecro - 15 Сентября, 2016 - 14:16:04 - перейти к сообщению
difight

пробовал, но если закидываешь два одинаковых значений WHERE ID IN (1, 1) то вернет одну строку, а надо две
6. Строитель - 15 Сентября, 2016 - 14:26:28 - перейти к сообщению
arimanecro, вроде бы всё верно - что вы попросили, то вам база и вернула. В table может храниться только одно поле title, у которого id будет равен единице. Ну а раз значение возвращается одно, то и итераций в цикле будет столько же.
7. arimanecro - 15 Сентября, 2016 - 14:36:45 - перейти к сообщению
Строитель

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

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

Тем более зачем делать два одинаковых запроса к базе. Сделайте 1 запрос соберите все данные в массив, а дальше выводите данные из массива сколько нужно раз.
9. arimanecro - 15 Сентября, 2016 - 15:03:07 - перейти к сообщению
Цитата:
Тем более зачем делать два одинаковых запроса к базе.


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

Чтобы вывести то же фото и название, надо обраиться к БД
10. Sail - 15 Сентября, 2016 - 15:25:47 - перейти к сообщению
arimanecro, покажите, пожалуйста, результат var_dump($items).
11. arimanecro - 15 Сентября, 2016 - 15:55:51 - перейти к сообщению
Sail

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

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

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

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



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

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


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

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

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


ну вот и все работает, одинаковые запросы в цикле, обрабатываются как надо Улыбка
12. Sail - 15 Сентября, 2016 - 16:16:24 - перейти к сообщению
arimanecro, возьмите всё-таки нечисловой индекс массива в кавычки, иль апострофы.
Зачем лишние "Notice: Use of undefined constant"?!
13. arimanecro - 15 Сентября, 2016 - 16:49:49 - перейти к сообщению
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)

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

PHP:
скопировать код в буфер обмена
  1. echo  "{$items['title']}";
14. Строитель - 15 Сентября, 2016 - 16:52:04 - перейти к сообщению
arimanecro пишет:
в оригинале я выводил так:
Надо было оригинал сюда сразу скопировать, и всё стало бы ясно.
(Добавление)
arimanecro пишет:
так это вообще-то запрещает синтаксис
Лучше так

 

Powered by ExBB FM 1.0 RC1