ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

Разработка отдельных фрагментов сайтов, консультации по вопросам верстки веб-страниц и веб-программирования.

Закрытие соединения. Выполнение запросов. Выборка запросов. Определение числа записей

Закрытие соединения

Закрытие соединения

Закрытие соединения осуществляется при помощи функции mysql_close(), которая имеет следующий синтаксис:

bool mysql_close ([resourse link_indetifier])

В качестве необязательного параметра функция принимает дескриптор открытого соединения link_indetifier. Если параметр не указан, закрывается последнее открытое соединение. Функция возвращает true в случае успеха и false — в противном случае.

<?php
//Aдрес сервера MySQL
$dblocation="localhost";
//Имя базы данных на хостинге или локальной машине
$dbname="test";
//Имя пользователя базы данных
$dbuser="root";
//его пароль
$dbpasswd=" ";
//устанавливаем соединение с базой данных
$dbcnx=@mysql_connect($dblocation, $dbuser, $dbpasswd);
if(!$dbcnx) {
exit("<p>В настоящий момент сервер базы данных не доступен, поэтому корректное отбражение страницы невозможно</p>");
}
//выбираем базу данных
if(!@mysql_select_db($dbname, $dbcnx))
{
exit("<p>В настоящий момент база данных не доступна, поэтому корректное отбражение страницы невозможно </p>");
}
if(mysql_close($dbcnx)) //разрываем соединение
{
echo "Соединение с базой данных прекращено";
}
else
{
echo "Не удалось завершить соединение";
}
?>

Выполнение запросов

Выполнение SQL-запросов осуществляется при помощи функции mysql_query(), которая имеет следующий синтаксис:

resource mysql_query(string query [, resource link_identifier])

Первый аргумент функции представляет собой строку с запросом query, второй link_identifier — дескриптор соединения, возвращаемый функцией mysql_connect().

Примечание. Если открытые соединения отсутствуют, функция пытается соединиться с СУБД, аналогично функции mysql_connect() без параметров. При передаче запроса функции mysql_query() точку с запятой в конце запроса, обязательную при работе с клиентом mysql, можно не ставить.

Функция возвращает дескриптор запроса в случае успеха и false в случае неудачного выполнения запроса.

<?php
//Устанавливаем соединение с базой данных
require_once("config.php");
//cоздаем таблицу
if (mysql_query("CREATE TABLE author (id_author INT NOT NULL, name TINYTEXT NOT NULL);"))
{
echo "Таблица успешно создана";
}
else
{
exit(mysql_error());
}
?>

При неудачном выполнении функции exit(), останавливающей работу скрипта, в качестве параметра передается значение ошибки, возвращаемой функцией mysql_error().

Выборка запросов

Дескриптор, возвращаемый функцией mysql_query(), используется далее для получения значений, возвращаемых СУБД. Обычно это осуществляется при помощи одной из пяти функций: mysql_result(), mysql_fetch_row(), mysql_fetch_assoc(), mysql_fetch_array(), mysql_fetch_object().

Первая функция mysql_result() возвращает результат запроса, выполненного функцией mysql_query(). С ее помощью можно получить доступ к отдельному полю записи. Синтаксис функции:

mixed mysql_result(resource result, int row [, mixed field])

В качестве первого аргумента result функция принимает дескриптор запроса, возвращаемый функцией mysql_query(). Второй аргумент row представляет собой номер столбца, который необходимо вернуть. Третий необязательный параметр field — это имя поля таблицы.

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

<?php
//Устанавливаем соединение с базой данных
require_once("config.php");
//Заполняет таблицу
if (mysql_query("INSERT INTO author VALUES(1, 'Федя');"))
{
echo "Таблица успешно заполнена";
}
else
{
exit(mysql_error());
}
?>

Теперь выводим первую запись с именем автора.

<?php
//Устанавливаем соединение с базой данных
require_once("config.php");
//Выполняем SQL-запрос
$ath=mysql_query("SELECT name FROM author;");
//Обрабатываем результаты запроса
if($ath) echo mysql_result($ath, 0, 'name');
else exit(mysql_error());
?>

Внимание! Если вы запустили данный скрипт на своем компьютере, и вместо русских букв и слов в окне браузера выдается "абракодабра", знайте, что пора приступить к настройке кодировки.

В первую очередь проверьте файл config.php. В нем должна быть установлена кодировка, которую вы назначили при установке MySQL(смотрите файл my.ini). В файле config.php кодировка установлена с помощью функции @mysql_query("SET NAMES 'cp1251'"). Если таблица базы данных заполнялась, как в нашем примере, с помощью скрипта РНР, то должно все получиться.

Если таблица базы данных заполнялась с помощью клиентской консоли mysql и вы не смогли прочитать запрос, придется набраться терпения и подбирать кодировку в файле config.php путем тестирования, используя для этого список кодировок(cp1251, koi8r, utf8, ср866 и т.д.). По умолчанию набранный в консоли текст будет помещен в базу данных MySQL в кодировке ср866(DOS). Поэтому попробуйте иправить кодировку в файле config.php на @mysql_query("SET NAMES 'cp866_general_ci'").

Если, текст в запросе опять прочитать не удалось, тогда работу с базами данных следует организовать через Командную строку. Как это сделать подробно описано ЗДЕСЬ.

Функция mysql_fetch_row() обрабатывает результаты запроса, выполнкнного функцией mysql_query(), и возвращает неассоциированный массив. Синтаксис функции:

array mysql_fetch_row(resource result)

В качестве единственного аргумента result функция принимает дескриптор запроса, возвращаемый функцией mysql_query(). Возвращает массив, содержащий данные обработанного ряда, или false, если рядов больше нет. При работе с данным массивом удобно использовать функцию list(), преобразующую элементы массива в переменные.

Применение функции mysql_fetch_row()

<?php
//Устанавливаем соединение с базой данных
require_once("../../config/config.php");
//Выполняем SQL-запрос
$ath=mysql_query("SELECT*FROM tb5");
//Проверяем выполнение SQL-запроса
if(!$ath) exit (mysql_error());
//Определяем таблицу и заголовок
//Так как запрос может возвращать несколько строк, применяем цикл
echo "<table border='1'>";
while(list($id, $family, $name, $patron)=mysql_fetch_row($ath))
{
echo "<tr>
<td>$id</td>
<td>$family</td>
<td>$name</td>
<td>$patron</td>
</tr>"
;
}
echo "</table>";
?>

В окне веб-браузера это будет выглядеть ТАК.

Функция mysql_fetch_assoc() обрабатывает результаты запроса и возвращает ассоциативный массив. Синтаксис функции:

array mysql_fetch_assoc(resource result)

В качестве единственного аргумента result функция принимает дескриптор запроса, возвращаемый функцией mysql_query(). Возвращает массив, содержащий данные обработанного ряда, или false, если рядов больше нет.

<?php
//Устанавливаем соединение с базой данных
require_once("../../config/config.php");
//Выполняем SQL-запрос
$ath=mysql_query("SELECT*FROM tb5");
//Проверяем выполнение SQL-запроса
if(!$ath) exit (mysql_error());
//Определяем таблицу и заголовок
//Так как запрос может возвращать несколько строк, применяем цикл
echo "<table border='1'>";
while($author=mysql_fetch_assoc($ath))
{
echo "<tr>
<td>"
.$author['id']."</td>
<td>"
.$author['family']."</td>
<td>"
.$author['name']."</td>
<td>"
.$author['patron']."</td>
</tr>"
;
}
echo "</table>"
?>

В окне веб-браузера это будет выглядеть ТАК.

Функция mysql_fetch_array() возвращает результаты запроса, выполненного функцией mysql_query(), в виде массива. Причем тип массива(численный или ассоциативный) может быть задан. Синтаксис функции:

array mysql_fetch_array(resource result [, int result_type])

В качестве первого аргумента result функция принимает дескриптор запроса, возвращаемый функцией mysql_query(). Второй не обязательный параметр может принимать три значения:

  • MYSQL_ASSOC — возврат результата работы в виде ассоциативного массива;
  • MYSQL_NUM — возврат результата работы в виде численного массива;
  • MYSQL_BOTH — возврат результата работы в виде массива, содержащего как численные, так и ассоциативные индексы.

Примечание. По умолчанию второй аргумент принимает значение MYSQL_BOTH.

Примечание. Режим работы функции mysql_fetch_array(), принимающей в качестве второго аргумента константы MYSQL_ASSOC и MYSQL_NUM, аналогичны функциям mysql_fetch_assoc() и mysql_fetch_row() соответственно.

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

<?php
//Устанавливаем соединение с базой данных
require_once("../../config/config.php");
//Выполняем SQL-запрос
$ath=mysql_query("SELECT*FROM tb5");
//Проверяем выполнение SQL-запроса
if(!$ath) exit (mysql_error());
//Определяем таблицу и заголовок
echo "<table border='0'>";
//Так как запрос может возвращать несколько строк, применяем цикл
while($author=mysql_fetch_array($ath))
{
echo "<tr>
<td>"
.$author['id']."</td>
<td>"
.$author['family']."</td>
<td>"
.$author['name']."</td>
<td>"
.$author['patron']."</td>
</tr>"
;
}
echo "</table>"
?>

В окне веб-браузера это будет выглядеть ТАК.

Функция mysql_fetch_object() обрабатывает результат запроса функции mysql_query() и возвращает поля таблицы в виде объекта, имена членов которого совпадают с именами полей таблицы. Синтаксис функции:

object mysql_fetch_object(resource result)

В качестве единственного аргумента result функция принимает дескриптор запроса, возвращаемый функцией mysql_query(). Возвращает объект со свойствами, соответствующие колонкам в обработанном ряду, или false, если рядов больше нет.

Примечание. Имена полей, возвращаемых этой функцией, не зависят от регистра.

<?php
//Устанавливаем соединение с базой данных
require_once("../../config/config.php");
//Выполняем SQL-запрос
$ath=mysql_query("SELECT*FROM tb5");
//Проверяем выполнение SQL-запроса
if(!$ath) exit (mysql_error());
while($row=mysql_fetch_object($ath))
{
echo "<p>family: ".$row->family."</p>";
echo "<p>name: ".$row->name."</p>";
echo "<p>patron: ".$row->patron."</p>";
}
?>

В окне веб-браузера это будет выглядеть ТАК.

Определение числа записей

Одной из распространенных задач при выборке из базы данных является определение числа записей, которые возвращает функция mysql_query(). Для этого предназначена функция mysql_num_rows(), которая имеет следующий синтаксис:

int mysql_num_rows(resource result)

В качестве единственного аргумента result функция принимает дескриптор запроса, возвращаемый функцией mysql_query().

Примечание. Эта функция работает только с запросами SELECT. Чтобы получить количество рядов, обработанных командами INSERT, UPDATE, DELETE, следует использовать функцию mysql_num_rows().

Примечание. Функция mysql_num_fields() позволяет определить число столбцов в результате.

Функция mysql_query() в случае успеха всегда возвращает дескриптор соединения и false только в случае ошибочного синтаксиса SQL-запроса, проверка соответствия параоля в примере, который мы собираемся рассмотреть ошибочна. Такая проверка будет срабатывать в любом случае, даже если число возвращаемых записей окажется равным нулю.

Таблица tb5

Таблица tb5

Пример ошибочной проверки пароля

<?php
//Устанавливаем соединение с базой данных
require_once("config.php");
//Формируем SQL-запрос
$query= "SELECT*FROM tb5 WHERE family='имя' AND password='пароль'";
//выполняем SQL-запрос
$ath=mysql_query($query);
//Проверяем выполнение SQL-запроса
if(!$ath)
{
exit("Ошибка авторизации");
}
else {
echo "Авторизация пройдена";
}
?>

Корректная проверка пароля с использование функции mysql_num_rows()

<?php
//Устанавливаем соединение с базой данных
require_once("config.php");
//Формируем SQL-запрос
$query= "SELECT*FROM tb5 WHERE family='Иванов' AND password='vovan'";
//выполняем SQL-запрос
$ath=mysql_query($query);
//Проверяем выполнение SQL-запроса
if(mysql_num_rows($ath)==0)
{
exit("Ошибка авторизации");
}
else {
echo "Авторизация пройдена";
}
?>

Число строк можно так же определить при помощи отдельного SQL-запроса, воспользовавшись встроенной функцией MySQL COUNT():

SELECT COUNT(*) FROM tb5;

<?php
//Устанавливаем соединение с базой данных
require_once("config.php");
//Выполняем SQL-запрос
$ath=mysql_query("SELECT COUNT(*) FROM tb5");
//Проверяем выполнение SQL-запроса
if(!$ath) exit (mysql_error());
echo $ath;
?>