Закрытие соединения
Закрытие соединения осуществляется при помощи функции 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
Пример ошибочной проверки пароля
<?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;
?>
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться