[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Статья "Вывод данных из БД MySQL"
Страницы: 1, 2
Игорь_Vasinsky
Что я могу сказать, к сожалению тема ещё актуальна :( До сих пор есть ребята, для которых это непонятная тема.

Вывод данных из БД MySQL (мускул)

Давайте создадим БД 'mydb', а в ней простую таблицу 'mytable'.

Для этого воспользуемся phpMyAdmin (PMA), предпологается, что у вас уже установлен пакет "Denwer" и так же есть навыки работы на нём:

- Запустите сервер
- В адресной строке наберите http://localhost
- Внизу страницы, в разделе "Утилиты": phpMyAdmin (http://localhost/Tools/phpmyadmin/)

1. На главной странице есть поле с именем "Новая база данных" - вводим в это поле 'mydb', нажимаем "создать". База создана.
2. После создания БД - Вас автоматически перенаправит в созданную БД.
3. Воспользуемся вкладкой "SQL":
- перед Вами текстовое поле "Выполнить SQL-запрос(ы) к базе данных mydb:",
- давайте, с помощью SQL - запроса, создадим таблицу, с которой мы и будем дальше работать.
- скопируйте, затем вставьте ниже приведённый запрос в текстовое поле, и нажмите "ок"

Пометка: работаем в юникоде, сравнение таблицы и сопостовление соединения - utf8_general_ci

CREATE TABLE  `mytable` (
id INT( 11 ) AUTO_INCREMENT ,
name VARCHAR( 20 ) NOT NULL ,
country VARCHAR( 25 ) NOT NULL ,
city VARCHAR( 25 ) NOT NULL ,
PRIMARY KEY ( id )
)


INSERT INTO `mytable` (`name`, `country`, `city`) VALUES
('Игорь', 'Россия', 'Уфа'),
(
'Дима', 'Россия', 'Москва'),
(
'Сергей', 'Украина', 'Киев'),
(
'Джон', 'США', 'Техас'),
(
'Будда', 'Индия', 'Перу'),
(
'Джек', 'Австралия', 'Сидней')

- Если всё сделано верно, то Вы увидите сообщение "SQL-запрос был успешно выполнен!"

4. Теперь у нас есть своя БД, в которой есть таблица с данными, переходим непосредственно к работе с этой БД
5. В директории своего локального сайта создайте страничку "index.php"
6. Теперь листинг этого файла:

<?php
//Чтоб не пропустить нотисы и ошибки
error_reporting(E_ALL);

//Укажем кодировку страницы
header("Content-type: text/html; charset=utf-8");

//Необходимо указать данные для подключения к серверу БД,
//это можно сделать с помощью переменных (или констант), объявим 4 переменные


$host = "localhost"; //Сервер БД
$user = "root"; //Имя пользователя, он по умолчанию "root"
$password = ""; //Пароль для пользователя, по умолчанию он пустой
$db = "mydb"; // Имя БД, с которой мы будем работать

//Для подключения к серверу MySQL в php есть функция mysql_connect()
//Синтаксис этой функции прост: mysql_connect(сервер, имя пользователя, пароль пользователя);
//Создадим переменную $link, которая будет содержать идентификатор нашего подключения к серверу БД

$link = mysql_connect($host, $user, $password);

//Выставим кодировку
mysql_query ("SET NAMES utf8");

//Далее необходимо выбрать БД, с которой мы будем работать, но перед этим мы проверим, действительно мы подключились к серверу БД
if($link) //идентично if($link === true), т.е. подключение прошло
$select_db = mysql_select_db($db);

//Чтобы дальше работать, необходимо проверить, выбрана ли наша БД
if(!$select_db) //Если БД не выбрана
echo "Ошибка выбора БД";
else //Если БД выбрана, продолжаем
{
//Итак, в самом начале статьи мы создали таблицу в нашей базе с помощью SQL - запроса
//Так и здесь, работая с БД мы всегда будем использовать SQL-запросы
//Для выбора данных из БД используется команда "SELECT" - выбрать
//Далее идёт * - она говорит, что выбирать мы будем "Всё", т.е. все столбцы (можно и указать отдельный столбец, например `name`, но об этом ещё рано)
//FROM `mytable` - далее мы указываем таблицу, данные которой мы будем выбирать.
//Обратите внимание, что имена столбцов и таблиц - мы обрамляем обратными апострофами `` (Ё - анг. раскладке)

$sql = "SELECT * FROM `mytable`";

//Далее необходимо отправить этот запрос серверу БД
//Для этого есть штатная функция mysql_query(запрос, идентификатор подключения)
//Но так как подключение у нас одно, значит "идентификатор подключения", мы можем опустить

$query = mysql_query($sql);

//В данном примере мы конечно знаем, что данные в БД есть, но на приктике - необходимо проверить наличие
// этих данных, достаточно просто подсчитать кол-во строк в таблице

if(!mysql_num_rows($query))
echo "В таблице нет данных!";
else
{


// Запрос отправлен, тепер нам необходимо получить выбранные данные которые вернул сервер
// Для этого в php есть 2 функции: mysql_fetch_array() и mysql_fetch_assoc()
// mysql_fetch_array() - - нам не подходит, т.к. в результате её работы возвращается два вида массива, один "простой" второй "ассоциативный",
// в итоге мы получаем избыточные данные, что нам ни к чему."
// mysql_fetch_assoc - вернёт нам только асициотивный массив
// Нам нужны данные в виде асициот. массива (ключи таого массива будут содержать имена столбцов таблиц)
// Исходя из этого, мы ест-но воспользуемся mysql_fetch_assoc(), зачем нам тратить ресурсы сервера на индексный массив
// Тепер нам нужно сформировать массив, куда мы поместим данные которые вернул сервер после нашего запроса $query
// Так как в нашей таблице несколько строчек, для этого используем цикл while(), и в цикле наполним массив

while($row = mysql_fetch_assoc($query)) //Будем писать в массив данные, пока есть строчки в таблице
{
/*Если вы намерены ещё где либо использовать данные, для удобства создадим ряд переменных
$id = $row['id']; //ID пользователя
$name = $row['name']; //Имя пользователя
$country = $row['country']; //Страна пользователя
$city = $row['city']; //Город пользователя
*/

//И вот на конец мы можем вывести все данные из БД

echo 'id:' . $row['id'] . ', имя: ' . $row['name'] . '(' .$row['country'] . '/' . $row['city'] . ')<br />';

//Раскомментируйте, чтобы посмотреть ввиде массива
#echo '<pre>' . print_r($row, 1) . '</pre>';

}
}


//Вот в принципе и все... А что именно произошло спрашиваете вы себя?
//Да всё очень просто, во время работы цикла While() - данные по строчно писались в наш массив $row
// Т.е по сути выполнялся код:
// $row = array(
// "id" = > "`id` из строчки таблицы",
// "name" => "`name` из строчки таблицы",
// "country" => "`coyntry` из строчки таблицы",
// "name" => "`cyty` из строчки таблицы"
// );

}

//Закрыли соединение
mysql_close($link);
?>


И массив заполнялся до тех пор, пока не кончились строчки в таблицы, вот мы и получили многомерный(2х) ассициотивный массив
А помогла на функция mysql_fetch_assoc(), которая работала в цикле while()

Мы рассмотрели простой пример, тепер можно и попробовать, что нить по интересней.
Например, давайте выведем всех пользователей, которые из России

Для того чтобы задать условие запросе в БД, используется оператор WHERE, нам всего лишь нужно подкорректировать
Запрос $sql, в нашем вернхнем примере

$sql = "SELECT * FROM `mytable` WHERE `country` = 'Россия'"; 


Обратите внимание, что в SQL знак равенства используется для сравнения данных, а в PHP сравнение происходит при использовании двух знаков равенства (a == равно)

Далее усложним... мы выведем только одного пользователя из России, для этого в конце запроса выставим LIMIT (на кол-во выводимых строк)

$sql = "SELECT * FROM `mytable` WHERE `country` = 'Россия' LIMIT 1";

Можно даже так LIMIT 3,10 - выведет все строки с 3 по 10 (если они там есть))))

Можно даже вывести всех из таблицы, которые не из России
    $sql = "SELECT * FROM `mytable` WHERE `country` <> 'Россия'"; //<> и != идентично


Если хотите выводить, допустим, только имя и город, то можно сократить расходуемые ресурсы сервера, указав в запросе только те столбцы таблицы,
которые Вам и нужны на выдаче:

 $sql = "SELECT `name`, `city` FROM `mytable` WHERE `country` <> 'Россия' LIMIT 1";

p.s - если вы указываете LIMIT = 1, то while - использовать не нужно.

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

Для этого в синтаксисе SQL используется команда ORDER BY, и далее указать столбец по которому сортируем, + 2 режима ASC (default) и DESC.

ASC - обычная сортировка (0-9 A-Z А-Я)
DESC - обратная сортировка (9-0 Z-A Я-А)


$sql = "SELECT * FROM `mytable` ORDER BY `name` ASC"; //ASC - можно не указывать


$sql = "SELECT * FROM `mytable` ORDER BY `name` DESC";


Обратите внимание, что при использовании сортировки и лимита необходимо соблюдать именно такой порядок

выбрать - что - в какой таблице - условие - сортировка - лимит

Ну и конечно же, переменные php внутри SQL:

$name = "Игорь";
$sql = "SELECT * FROM `mytable` WHERE `name` = '" . $name . "'";

$id = 3;
$sql = "SELECT * FROM `mytable` WHERE `id` = " . (int)$id ;


Переменные - в string - необходимо обрамлять ' " . $string . " '
Числа (нужно опустить дв. кавычки, и подстраховаться указав тип переменной) ' . (int)$id . '

Дополнение (плюшки):

Во время работы с БД, а именно при составлении SQL-запросов, новичку очень легко допустит ошибку, поэтому php предусмотрены функция вывода ошибок: mysql_error();

Синтаксис такой:
$link = mysql_connect($host, $user, $password) or die(mysql_error());
$query = mysql_query("SELECT * FROM `mytable` ORDER BY `name`") or die(mysql_error());

Теперь вам в прямом смысле будет "Разжовано" - где вы допустили ошибку ;)

Но такой вывод ошибок я рекомендую использовать только при отладке скрипта, а в работе заменять на самописные ошибки:
$link = mysql_connect($host, $user, $password) or die("Не могу подключится к серверу!");
$query = mysql_query("SELECT * FROM `mytable` ORDER BY `name`") or die("Ошибка запроса в БД");




autor: (ТС) Игорь_Vasinsky

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.