belarusweb.net
© Петр Романовский Минск, 2016-2017.



belarusweb.net

Основы создания сайтов...
PHP+MySQL >>>
                          Учебник Задачник Справочник

11.4. Обработка данных результирующего набора

В нашей таблице пока имеется запись только об одном пользователе. Давайте добавим туда еще несколько записей. При этом будем считать, что данные вводятся пользователями при регистрации, а скрипт лишь заносит их в базу данных (см. пример 11.6).

<?php
//Оформим аргументы, которые необходимо передать конструктору 
//mysqli::__construct, в виде переменных

//Имя хоста задаем как "localhost", хотя можем входить с любого компьютера
$servername = "localhost";
//Входим под именем администратора  
$username = "administrator"; 
//Не забываем про пароль
$password = "12345";
//Указываем базу данных, к которой будем  подключаться
$db_name = "belarusweb_users";
//Создаем объект соединения с MySQL	
$conn = new mysqli ($servername, $username, $password, $db_name);

//Если произойдет ошибка соединения, то выведем строку с описанием последней ошибки
//подключения, использовав свойство объекта mysqli->connect_error и прервем скрипт
if ($conn->connect_error){   
   //Функция die() выводит сообщение и прекращает выполнение текущего скрипта
   echo "Ошибка соединения с сервером MySQL: ".$conn->connect_error."<br>";
	//Функция die() выводит сообщение и прекращает выполнение текущего скрипта	
	die("Соединение установлено не было.");
}
//Установим кодировку данных для данного соединения с MySQL, чтобы русские символы правильно отображались в базе.
$conn->set_charset("utf8"); 

//Чтобы не использовать повторно большие куски кода, оформим класс 
class sql_msg{
	//Статический метод можно будет вызывать без создания объекта
	public static function result($sql){
		//Будем использовать глобальную переменную
		global $conn;
		//Выполняем запрос и если он прошел успешно, сообщаем об успехе
		if($conn->query($sql) === true){
			echo "Операция успешно выполнена.<br>";     
		}else{
			//Прекращаем выполнение скрипта и выводим строку с описанием ошибки
			echo "Ошибка операции: ".$conn->error.".";   
			//Т.к. соединение нам пока не нужно, закрываем его
			$conn->close();
			//Функция die() прекращает дальнейшее выполнение текущего скрипта	
			die();
		}
	}
}

//В первых скобках перечисляем имена столбцов, во вторых соответствующие значения
//Порядок столбцов может быть любым, но тогда нужно поменять и порядок соответствующих 
//им значений. Количество значений должно быть равным количеству столбцов
$sql_1 = "insert into our_users(first_name,	last_name, age, sex, reg_mail)
			values('Сергей', 'Петров', 30, 'мужской', 'my_mail_1@tut.by')";   
//Выполняем запрос и если он прошел успешно, сообщаем об успехе
sql_msg::result($sql_1);

$sql_2 = "insert into our_users(first_name,	last_name, age, sex, reg_mail)
			values('Сергей', 'Иванов', 33, 'мужской', 'my_mail_3@tut.by')"; 
sql_msg::result($sql_2);

$sql_3 = "insert into our_users(first_name,	last_name, age, sex, reg_mail)
			values('Иван', 'Иванов', 23, 'мужской', 'my_mail_21@tut.by')"; 
sql_msg::result($sql_3);

$sql_4 = "insert into our_users(first_name,	last_name, age, sex, reg_mail)
			values('Елена', 'Сидорова', 23, 'женский', 'my_mail_10@tut.by')"; 
sql_msg::result($sql_4);

$sql_5 = "insert into our_users(first_name,	last_name, age, sex, reg_mail)
			values('Наталья', 'Осипович', 44, 'женский', 'my_mail_15@tut.by')"; 
sql_msg::result($sql_5);

//Т.к. больше соединение нам пока не нужно, закрываем его
$conn->close();   
?>

Пример 11.6. Наполнение таблицы данными

После заполнения таблицы данными и просмотре ее содержимого в phpMyAdmin она будет иметь вид, показанный на рис. 11.1.

Рис. 11.1. Таблица с данными пользователей

Если данные из таблицы понадобится извлечь для дальнейшего использования, например, для отображения данных пользователя на его персональной странице, нужно отправить соответствующий запрос на выборку необходимых данных при помощи метода mysqli::query(), который в случае успешного выполнения запросов SELECT, SHOW, DESCRIBE или EXPLAIN вернет объект mysqli_result, представлющий собой результирующий набор данного запроса. Далее, при помощи свойств и методов mysqli_result, данные результирующего набора могут быть обработаны, а затем использованы по своему усмотрению (см. пример 11.7).

<?php
//Оформим аргументы, которые необходимо передать конструктору 
//mysqli::__construct, в виде переменных

//Имя хоста задаем как "localhost", хотя можем входить с любого компьютера
$servername = "localhost";
//Входим под именем администратора  
$username = "administrator"; 
//Не забываем про пароль
$password = "12345";
//Указываем базу данных, к которой будем  подключаться
$db_name = "belarusweb_users";
//Создаем объект соединения с MySQL	
$conn = new mysqli ($servername, $username, $password, $db_name);

//Если произойдет ошибка соединения, то выведем строку с описанием последней ошибки
//подключения, использовав свойство объекта mysqli->connect_error и прервем скрипт
if ($conn->connect_error){   
   //Функция die() выводит сообщение и прекращает выполнение текущего скрипта
   echo "Ошибка соединения с сервером MySQL: ".$conn->connect_error."<br>";
	//Функция die() выводит сообщение и прекращает выполнение текущего скрипта	
	die("Соединение установлено не было.");
}
//Установим кодировку данных для данного соединения с MySQL, 
//чтобы русские символы правильно отображались в базе.
$conn->set_charset("utf8"); 

//Чтобы не использовать повторно большие куски кода, оформим класс 
class sql_msg{
	//Статический метод можно будет вызывать без создания объекта
	public static function result($rslt){
		//Будем использовать глобальную переменную
		global $conn;
		//Если запрос не удался
		if($rslt === false){
			//Прекращаем выполнение скрипта и выводим строку с описанием ошибки
			echo "Ошибка операции: ".$conn->error.".";   
			//Т.к. соединение нам пока не нужно, закрываем его
			$conn->close();
			//Функция die() прекращает дальнейшее выполнение текущего скрипта	
			die();
		}
	}
}
echo 'Первый пример.<br>';

//.................. 1. mysqli_result::fetch_row()  ...........................

//Выберем все строки, в столбце first_name которых присутствует значение 'Сергей'
$sql_1 = "select * from our_users where first_name='Сергей'"; 
//Выполняем запрос, а результат присваеваем переменной
$rslt_1=$conn->query($sql_1);
//Если запрос прошел успешно, сообщаем об успехе
sql_msg::result($rslt_1);

//mysqli_result::$num_rows возвращает число рядов результирующей выборки
//Так что цикл выведет все строки подряд
for($i=0; $i<$rslt_1->num_rows; $i++){
	//mysqli_result::fetch_row() возвращает строку выборки в виде массива, т.е. 
	//значения каждой колонки строки становятся элементами массива
	$m = $rslt_1->fetch_row();
	//Выведем через пробел все значения массива (т.е. колонок текущей строки)
	for($k=0; $k<count($m); $k++){
		echo $m[$k].' &nbsp ';
	}
	//Значения каждой новой строки результирующего набора выведем на новой строке
	echo '<br>';
}

//Освобождаем память занятую результатами запроса
$rslt_1->free();
//Значения каждого нового запроса выведем на новой строке
echo '<br>Второй пример.<br>';

//.................. 2. mysqli_result::fetch_assoc()  ...........................

//Выберем все строки, в столбце first_name которых присутствует значение 'Сергей'
$sql_1 = "select * from our_users where first_name='Сергей'"; 
//Выполняем запрос, а результат присваеваем переменной
$rslt_1=$conn->query($sql_1);
//Если запрос прошел успешно, сообщаем об успехе
sql_msg::result($rslt_1);

//mysqli_result::$num_rows возвращает число рядов результирующей выборки
//Так что цикл выведет все строки подряд
for($i=0; $i<$rslt_1->num_rows; $i++){
	//mysqli_result::fetch_assoc() возвращает строку выборки в виде ассоциативного 
	//массива, т.е. значения каждой колонки строки становятся элементами массива, 
	//в котором ключи элементов массива соответствуют именам колонок строки
	$m = $rslt_1->fetch_assoc();
	
	//Выведем через пробел все значения массива (т.е. колонок текущей строки)
	foreach($m as $key=>$value){
		echo $m[$key].' &nbsp ';
	}
	//Значения каждой новой строки результирующего набора выведем на новой строке
	echo '<br>';
}

//Освобождаем память занятую результатами запроса
$rslt_1->free();
//Значения каждого нового запроса выведем на новой строке
echo '<br>Третий пример.<br>';
  
//.................. 3. mysqli_result::fetch_array()  ...........................

//Выберем все строки, в столбце first_name которых присутствует значение 'Сергей'
$sql_1 = "select * from our_users where first_name='Сергей'"; 
//Выполняем запрос, а результат присваеваем переменной
$rslt_1=$conn->query($sql_1);
//Если запрос прошел успешно, сообщаем об успехе
sql_msg::result($rslt_1);

	//Сместим указатель на 1-ю строку набора при помощи mysqli_result::data_seek() 
	$rslt_1->data_seek(0);
	
	//mysqli_result::fetch_array(MYSQLI_ASSOC | MYSQLI_NUM | MYSQLI_BOTH) возвращает 
	//строку выборки в виде ассоциативного массива, обычного или сразу обоих  
	$m = $rslt_1->fetch_array(MYSQLI_ASSOC);
	
	//Выведем через пробел все значения массива, используя именованные ключи
	foreach($m as $key=>$value){
		echo $m[$key].' &nbsp ';
	}
	//Значения следующей строки результирующего набора выведем на новой строке
	echo '<br>';

	//Сместим указатель на последнюю строку набора 
	$rslt_1->data_seek($rslt_1->num_rows-1);
	
	//mysqli_result::fetch_array(MYSQLI_ASSOC | MYSQLI_NUM | MYSQLI_BOTH) возвращает 
	//строку выборки в виде ассоциативного массива, обычного или сразу обоих  
	$m = $rslt_1->fetch_array(MYSQLI_NUM);
	
	//Выведем через пробел все значения массива используя числовые ключи
	for($i=0; $i<$rslt_1->field_count; $i++){
		echo $m[$i].' &nbsp ';
	}
//Освобождаем память занятую результатами запроса
$rslt_1->free();

//Т.к. больше соединение нам пока не нужно, закрываем его
$conn->close();   
?>	

Пример 11.7. Извлечение данных результирующего набора

Еще раз посмотрите в официальном справочнике информацию по использованным нами методам и свойствам модуля MySQLi:

Самостоятельно ознакомьтесь и с другими свойствами и методами, которые предлагаются в модуле MySQLi, но не были использованы нами в примере.

Словарь новых английских слов

general [ˈdʒɛn(ə)r(ə)l] – общий, всеобщий.
license [ˈlʌɪs(ə)ns] – лицензия.
connect [kəˈnɛkt] – соединять, связывать.
identify [ʌɪˈdɛntɪfʌɪ] – устанавливать личность, опознавать.
close [kləʊs] – закрывать.
grant [ɡrɑːnt] – разрешать, дарить.
option [ˈɒpʃ(ə)n] – выбор, опция.
die [daɪ] – умирать.
root [ruːt] – корень, основание, база, основа.
administrator [ədˈmɪnɪstreɪtə] – управляющий, администратор.
character [ˈkærəktər] – символ, характер.
unsigned [ʌnˈsaɪnd] – неподписанный, число без знака
primary [ˈprʌɪm(ə)ri] – первичный, основной, главный.
set [set] – устанавливать.
key [ki:] – ключ, клавиша, идентификатор.
insert [ˈɪnsɛt] – вставлять, вкладка.
structured [ˈstrʌktʃəd] – структурированный.
query [ˈkwɪəri] – запрос, вопрос.
increment [ˈɪŋkrɪm(ə)nt] – увеличение, приращение.
age [eɪdʒ] – возраст, век, период, эра.
result [rɪˈzʌlt] – результат, итог.
select [sɪˈlɛkt] – проводить отбор, выбирать.
where [wɛː] – где, куда, в каком месте.
count [kaʊnt] – счет, подсчет, итог.
free [friː] – свободный, освобождать.
fetch [fetʃ] – извлекать.
seek [siːk] – искать.
Комментарии (0)
Петр Романовский
1. Приветствуются комментарии, которые содержат дополнения к материалу текущей страницы, а также ваши ответы на вопросы других пользователей.
2. Если вам что-то непонятно - спрашивайте, не забывая написать, что именно и с какого места.
Показаны все комментарии
Чтобы оставить свой комментарий, авторизуйтесь, пожалуйста!    
     
belarusweb.net © Петр Романовский, Минск, 2016-2017.
Связаться с автором
Наверх