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 :: Массив sql запроса

 PHP.SU

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


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

> Описание: Как вывести определенный элеммент из списка
7erj
Отправлено: 22 Августа, 2015 - 14:40:44
Post Id



Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Янв. 2015  
Откуда: Украина, Запорожье


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




Друзья, нужна помощь. Делаю из бд sql запрос, вот код:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. // Соединяемся, выбираем базу данных
  4. $link = mysql_connect('localhost', 'root', '')
  5.     or die('Не удалось соединиться: ' . mysql_error());
  6. echo 'Соединение успешно установлено';
  7. mysql_select_db('abills') or die('Не удалось выбрать базу данных');
  8.  
  9. // Выполняем SQL-запрос
  10. $query = "SELECT deposit FROM bills";
  11. $result = mysql_query($query) or die('Запрос не удался: ' . mysql_error());
  12.  
  13. // Выводим результаты в html
  14. while ($line = mysql_fetch_array($result)) {
  15.     foreach ($line as $value) {
  16.         echo "<br />$value";
  17.     }
  18. }
  19.  
  20. // Освобождаем память от результата
  21.  
  22. // Закрываем соединение
  23. mysql_close($link);
  24. ?>

Цикл выводит все строки из бд (сделал скрин). Но массив формирует запись, а не саму строку. В том и проблема. То есть я не могу вывести отдельно одну запись. Если я делаю вывод таким образом: $value[1], выходит белеберда. Как мне вывести одну запись из списка?
Прикреплено изображение (Нажмите для увеличения)
Снимок.PNG

(Отредактировано автором: 22 Августа, 2015 - 14:48:58)



-----
trust me i'm an engineer
 
My status
 Top
7erj
Отправлено: 22 Августа, 2015 - 14:43:13
Post Id



Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Янв. 2015  
Откуда: Украина, Запорожье


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




А вот, что происходит, когда я пишу $value[1]
(Добавление)
Если я что-то непонятно написал в принципе скрины все обьясняют. Но я могу еще раз обьяснить, только помогите, пожалуйста)
Прикреплено изображение (Нажмите для увеличения)
Снимок.PNG


-----
trust me i'm an engineer
 
My status
 Top
Мелкий Супермодератор
Отправлено: 22 Августа, 2015 - 14:49:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




У меня только один вопрос: зачем?
А, нет, два "зачем?"
Во-первых, зачем вы делаете foreach?
Во-вторых, зачем продолжаете насиловать труп mysql_*? Он уже не то что deprecated, он уже удалён.


-----
PostgreSQL DBA
 
 Top
7erj
Отправлено: 22 Августа, 2015 - 14:50:46
Post Id



Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Янв. 2015  
Откуда: Украина, Запорожье


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




Мелкий пишет:
У меня только один вопрос: зачем?
А, нет, два "зачем?"
Во-первых, зачем вы делаете foreach?
Во-вторых, зачем продолжаете насиловать труп mysql_*? Он уже не то что deprecated, он уже удалён.

Это запись с мануала php)
(Добавление)
Предложите что-то, я понимаю, что я безграмотный больной кодер. Я все понял, что у меня везде ошибки и зря я сюда полез. Хорошо. Так случилось.Я тоже могу критиковать только.
Помогите мне сделать так, как надо. Предложения, пример какой-то. И вам буду очень благодарен не только я, а все ребята, которые столкнулись с этим.

Пожалуйста
(Добавление)
Foreach я делаю, чтобы вывести содержимое array, а не сам array.

(Отредактировано автором: 22 Августа, 2015 - 15:23:09)



-----
trust me i'm an engineer
 
My status
 Top
Мелкий Супермодератор
Отправлено: 22 Августа, 2015 - 15:46:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




В мануале уже два года (!!!) висит плашка Warning This extension is deprecated as of PHP 5.5.0
foreach делать над массивом надо, когда вы не знаете длину, ключи массива. В случае обработки строки результата из бд вы всегда знаете, что вам вернулось - что запросили, то и вернулось. И обычно по ключу сразу и читают.

Как надо:
PHP:
скопировать код в буфер обмена
  1. $pdo = new \pdo(/**/);
  2. $result = $pdo->query("SELECT deposit FROM bills");
  3. foreach ($result as $row) {
  4. echo $row['deposit'];
  5. }

Для возврата только одной колонки, как тут, бывает уместнее fetchColumn.
Ну или на mysqli.


-----
PostgreSQL DBA
 
 Top
7erj
Отправлено: 22 Августа, 2015 - 16:18:59
Post Id



Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Янв. 2015  
Откуда: Украина, Запорожье


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




Мелкий пишет:
В мануале уже два года (!!!) висит плашка Warning This extension is deprecated as of PHP 5.5.0
foreach делать над массивом надо, когда вы не знаете длину, ключи массива. В случае обработки строки результата из бд вы всегда знаете, что вам вернулось - что запросили, то и вернулось. И обычно по ключу сразу и читают.

Вот, это то, что я хотел. Спасибо большое, через время попробую и отпишу)


-----
trust me i'm an engineer
 
My status
 Top
7erj
Отправлено: 23 Августа, 2015 - 12:00:37
Post Id



Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Янв. 2015  
Откуда: Украина, Запорожье


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




Мелкий, Все работает, я придумал по другому вытащить нужную строку с помощью WHERE. Спасибо!
Код конечно на много круче...

(Отредактировано автором: 23 Августа, 2015 - 14:14:58)



-----
trust me i'm an engineer
 
My status
 Top
7erj
Отправлено: 23 Августа, 2015 - 14:08:28
Post Id



Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Янв. 2015  
Откуда: Украина, Запорожье


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




Мелкий, есть проблемка, вот код:

PHP:
скопировать код в буфер обмена
  1.  
  2. $ipconfig = 2130706433;
  3. $pdo = new PDO($dsn, $user, $password);
  4. $result = $pdo->query("SELECT * FROM bills JOIN dv_main ON bills.uid = dv_main.uid WHERE uid=$ipconfig");
  5. foreach ($result as $row) {
  6. $abon_ip = trim(int2ip($row['ip']));
  7. echo '<br />'.$row['deposit'].$abon_ip;
  8. if($ipconfig == $abon_ip){echo 'it\'s working!';}
  9. else{}
  10. }


Выдает:
Warning: Invalid argument supplied for foreach() in Z:\home\test1.ru\www\sql.php on line 22
(Добавление)
Как-то надо переменную в запрос засунуть, как это возможно?

(Отредактировано автором: 23 Августа, 2015 - 14:10:07)



-----
trust me i'm an engineer
 
My status
 Top
Мелкий Супермодератор
Отправлено: 23 Августа, 2015 - 14:26:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




7erj пишет:
Как-то надо переменную в запрос засунуть

http://php.net/manual/en/pdo.pre...d-statements.php

Но как у вас, хоть и неправильно, но работать должно. Что-то непосредственно СУБД не понравилось.
Переключите PDO::ATTR_ERRMODE в PDO::ERRMODE_EXCEPTION, так куда удобнее, чем if'ы расставлять и pdo->errorInfo читать.


-----
PostgreSQL DBA
 
 Top
7erj
Отправлено: 23 Августа, 2015 - 14:37:12
Post Id



Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Янв. 2015  
Откуда: Украина, Запорожье


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




Мелкий пишет:
Переключите PDO::ATTR_ERRMODE в PDO::ERRMODE_EXCEPTION, так куда удобнее, чем if'ы расставлять и pdo->errorInfo читать.

Хорошо, еще раз спасибо, кажется решил уже ))
(Добавление)
Да, в бд была ошибка.


-----
trust me i'm an engineer
 
My status
 Top
7erj
Отправлено: 23 Августа, 2015 - 18:32:18
Post Id



Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Янв. 2015  
Откуда: Украина, Запорожье


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




эмм... все никак не выясню, все что надо)
В конце данного запроса:
PHP:
скопировать код в буфер обмена
  1. $pdo = new \pdo(/**/);
  2. $result = $pdo->query("SELECT deposit FROM bills");
  3. foreach ($result as $row) {
  4. echo $row['deposit'];
  5. }


Нужно ли закрывать соеденения подобным образом?:

(Отредактировано автором: 23 Августа, 2015 - 18:33:41)



-----
trust me i'm an engineer
 
My status
 Top
Мелкий Супермодератор
Отправлено: 23 Августа, 2015 - 20:20:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




У PDO вполне приличный деструктор, который сам закроет соединение при завершении скрипта.


-----
PostgreSQL DBA
 
 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