Здавалка
Главная | Обратная связь

Состав и назначение файла конфигурации config.php. способы включения файла конфигурации в скрипты РНР.



После того как соединение установлено, необходимо выбрать базу данных, с которой пользователь желает работать. Это осуществляется при помощи функции mysql, которая имеет следующий синтаксис: mysql_select_db(имя базы данных [,идентификатор соединения])

Использование этой функции эквивалентно вызову команды use в SQL-запросе, т. е. функция mysql_select_db() выбирает базу данных для дальнейшей работы, и все последующие SQL-запросы применяются к выбранной базе данных. Пример. Выбор базы данных с именем base_01

<?php

mysql_select_db ("base_01", $connect);

?>Имеет смысл помещать функции соединения с сервером (config.php) и выбора базы данных в один и тот же файл (config1.php):

 
<?php

$connect = mysql_connect("uchserv", "student", "");

mysql_select_db("base_01", $connect);

?>

 

22.Синтаксис функции PHP по созданию запросов к базе данных MySQL. Функция РНР для отображения результата запроса на выборку данных из базы данных MySQL. Примеры.
После установки соединения с сервером баз данных и указания имени используемой базы данных выполняются SQL-запросы к базе данных из PHP-сценариев при помощи функции:

mysql_query("запрос MySQL"[,идентификатор соединения])or die("Ошибка при выполнении запроса:".mysql_error());

Замечание.При передаче запроса функции mysql_query() точку с запятой в конце запроса, обязательную при работе с клиентом mysql, можно не ставить.

2 способа записи функции mysql_query()

Пример. Запрос на выборку всех записей из таблицы product в базе данных base_01.

1 способ

<HTML>

<BODY>

<?php

include "config1.php";

$result=mysql_query("SELECT * FROM product");

mysql_close($connect);

?>

</BODY>

</HTML>

2способ

<HTML>

<BODY>

<?php

include "config1.php";

$query="SELECT * FROM product";

$result=mysql_query($query );

полстраницы

mysql_close($connect);

?>

</BODY>

</HTML>

Результат SQL запроса на выборку всех записей из таблицы записывается в переменную $result[i], содержащую все строки требуемой таблицы.

Для организации последовательного отображения всех строк таблицы используется цикл while в сочетании с функцией mysql_fetch_array(). Эта функция возвращает очередную строку из набора данных в виде массива, проиндексированного именами полей таблицы:

Синтаксис данной функции:

mysql_fetch_array (дескриптор запроса[,тип результата])

Второй необязательный параметртип результата может принимать три значения:

mysql_assoc — возврат результата работы в виде ассоциативного массива;

mysql_num — возврат результата работы в виде численного неассоциативного массива;

mysql_both — возврат результата работы в виде массива, содержащего как численные, так и ассоциативные значения.

Возвращаемый массив содержит значения, идентифицируемые как по числовым индексам столбцов, так и по именам столбцов. Другими словами, доступ к значению каждого столбца можно получить как по числовому индексу, так и по названию столбца. Предположим, результат запроса хранится в массиве с именем $row, тогда доступ к его элементам можно получить следующим образом:

Доступ к значению каждого элемента массива можно получить как по названию столбца, так и по его числовому индексу.

Предположим, результат запроса хранится в массиве с именем $row, тогда доступ к его элементам можно получить следующим образом:

$row[0]

$row[1]

$row["name"]

$row["cena"]

где [0],[1]– числовые индексы столбцов name и cena, ["name"]["cena"]- названия столбцов.

Возможные значения, возвращаемые функцией mysql_query() при выполнении select-запросов на выборку записей из таблицы MySQL. Обработка ошибок выполнения таких запросов и анализ результатов их выполнения. Примеры.

_ Обработка запросоввозвращающая результирующий набор select:1.результирующий набор возвращает только одну запись(строку). mysql_query() возвращает: идентификатор результирующего набора(1запись)-для организации выборки строки my sql fetch array(). FALSE-идентификатор неуспешного завершения запроса.предполагается, что результирующий набор содержит только одно значение кот возвращается ф-ей mesql query() для запроса SELECT. Это значение мы помещаем в некоторую переменную например $result. Значение сохраненное в переменную result позволяет получить доступ к результирующему набору но никогда сам по себе не является результатом. Даже если результат состоит из 1го значения его необходимо выбрать с помощью ф-ии mysql fetch array(),$result = mysql_query ("SELECT COUNT(*) FROM member");

if (!$result || !($row = mysql_fetch_array ($result)))

print ("Ошибка при выполнении запроса ");

else

print ("В таблице member имеется". $row[0] . "записей");

2.Результирующий набор содержит несколько записей: mysql_query возвращает 1.идентификатор результирующего набора(много записей)-для организации вывода записей:mysql fetch array(),mysql num fields,mysql num rows.2.FALSE-идентификатор неуспешного завершения запроса.

В следующем примере показан один из способов, как это можно сделать:

$result = mysql_query ("SELECT * FROM member");

if (!$result)

print ("Ошибка при выполнении запроса");

else

print ("количество возвращенных строк: ".mysql_num_rows($result));

while ($row = mysql_ fetch_ array ($result))

{

for ($i = 0; $i < mysql_num_fields ($result); $i++)

{

print ($row[$i]);

}

print ("\n");

}

mysq_free_result ($result);

Другим способом выборки массива является присвоение результата списку переменных. Например, для выборки столбцов fam и name непосредственно в переменные $f и $n, чтобы напечатать имена в последовательности фамилия и имя, необходимо сделать следующее:

$query = "SELECT fam, name FROM member";

$result = mysql_query ($query)

or die ("Ошибка запроса");

while (list ($f, $n) = mysql_fetch_row ($result))

print ( $f, $n) ;

mysql_free_result ($result);

Переменным могут присваиваться любые допустимые значения, но их порядок в list () должен соответствовать порядку столбцов, выбранных по запросу.

 


 


24Проверка результатов запроса на значения "NULL"

Язык РНР интерпретирует значения "NULL" как неустановленные значения. Проверка производится с помощью функции isset (). Ниже приведен пример, в котором производится выборка и печать электронных адресов из таблицы member, печатая сообщение "Электронный адрес отсутствует", если столбец имеет значение "NULL".

$query = "SELECT email FROM member";

$result= mysql_query ($query) or die ("Ошибка запроса") ;

while (mysql_fetch_row ($result))

{

print ("Электронная почта: ");

if (!isset ($email))или (($email==NULL)

print ("Электронный адрес отсутствует");

Else

print ($email);

print ("\n");

}

mysql_free_result ($result);

Есть еще одна подобная функция empty(), но она возвращает один и тот же результат как для значений "NULL", так и для пустых строк. Поэтому при тестировании строк на пустое значение эта функция мало в чем может помочь. на значение "NULL" значений, возвращаемых запросом SELECT,

Функция die () аналогична функции exit (), но перед выходом печатает диагностическое сообщение. Обработка ошибокЯзык РНР предоставляет в распоряжение разработчика три средства обработки ошибочных ситуаций. Два из них применимы ко всем типам ошибок, а одно имеет только отношение к операциям с СУБД MySQL. Во-первых, для подавления сообщений об ошибках можно использовать символ отмены вывода— @. Этот символ можно использовать с любой функцией, которая выводит сообщение. Например, при вызове функции mysql_connect () для предотвращения рассылки сообщений от этой функции клиенту. $connect = @mysql_connect ("uchserv", "student", ""); Во-вторых, для отключения или включения диагностирования ошибок любого уровня можно воспользоваться функцией error_reporting().Уровень ошибки Тип диагностируемой ошибкиE_ERROR Ошибки обычных функций E_WARNING Обычные предупреждения E_PARSE Ошибки синтаксического анализатора Е_NOTIСЕ Замечания

E_CORE_ERROR Ошибки обработчика E_CORE_WARNING Предупреждения обработчика E_COMPILE_ERROR Ошибки компилятора E_COMPILE_WARNING Предупреждения компилятора E_USER_ERROR . Ошибки пользователей E_USER_WARNING Предупреждение пользователей E_USER_NOTICE Уведомление пользователей E_ALL Все ошибки

Для того чтобы управлять диагностированием ошибок с помощью функции error_reporting (), ее нужно вызвать с аргументом, равным побитовому "ИЛИ" всех уровней, которые вы хотите установить. Для подавления вывода ошибок функций СУБД MySQL достаточно отключить уровни E_ERROR и E_WARNING: error_reporting (E_ERROR | E_WARNING);Отключать диагностирование уровня E_PARSE (ошибки синтаксического анализатора) не рекомендуется, так как это может затруднить отладку любых изменений, вносимых в SQL-запросы. Предупреждения уровня E_NOTICE зачастую можно игнорировать, но иногда они могут помочь определить ошибки в сценарии, на которые следует обратить внимание. Таким образом, диагностирование ошибок этого уровня также можно оставить включенным. Ошибки других уровней, за исключением, пожалуй, уровня E_ALL, можно не брать в расчет.В-третьих, обработка ошибок с использованием функций mysql_error() и mysql_errno(). Эти функции диагностируют ошибки, которые возвращаются сервером MySQL. Функция mysql_error () возвращает сообщение об ошибке в виде строки (пустая строка свидетельствует об отсутствии ошибки). Функция mysql_errno () возвращает номер ошибки (0 — если ошибки нет). Обе функции принимают идентификатор соединения в качестве аргумента, определяющего соединение с сервером MySQL, и обе возвращают информацию об ошибке самой последней вызванной функции MySQL. Идентификатор соединения можно не указывать; если он отсутствует, диагностируется последнее соединение. Например, диагностировать ошибку, произошедшую при работе mysql_query (), можно следующим образом: $result = mysql_query ($query); if (!$result) print ("errno: " . mysql_errno() . "\n"); print ("error: " . mysql_error() . "\n");

Проблема кавычекПри конструировании строк SQL-запроса на языке РНР необходимобыть очень осторожным с кавычками. Предположим, что необходимо создать запрос, добавляющий запись в таблицу. Значение, которое будет добавлено в таблицу, можно заключить в кавычки:

$fam = "O'Malley";

$name = "Brian";

$query = "INSERT member ($fam, $name) VALUES (' $fam', '$name' )"

Проблема здесь заключается в том, что одно из значений, заключенных в кавычки, содержит одинарную кавычку (O'Malley). Это является причиной синтаксической ошибки при посылке такого запроса на сервер MySQL. Для отправки таких запросов в языке РНР используется функция addslashes().Предыдущий

пример можно переписать следующим образом:

$fam = addslashes("O'Malley");

$name = addslashes("Brian");

$query = "INSERT member ($fam, $name) VALUES (' $fam', '$name' )"

25.Команда MySQL для организации выборки записей из нескольких таблиц. Типы объединений таблиц (тривиальное объединение, объединение типа EQUI-JOIN, полное объединение, левое и правое объединения). Примеры. Тривиальное объединение является самым простым объединением, в кот.используется одна таблица. Во избежание неоднозначности при объединении нескольких таблиц, выбираемые таблицы пишутся: имя табл.имя поля

SELECT table1.*, table2.* FROM table1, table2;Объединение типа EQUI-JOIN (объединение по равенству)SELECT table1.fio, table3.sum FROM table1, table3 WHERE table1.kod_fio=table3.kod_fio;WHERE – имена полей, по кот.связываются выбираемые таблицы. Примечание: 1) если нарушается ссылочная целостность (наприм, в табл3 исп-ся запись об оплате услуг, кот. Отсутствует в табл.1, то записи не выводятся.2) не обяз-но указывать перед именем выбираемого поля имя таблицы, кот. оно принадлежит.3) В предложении FROM нужно перечислять все таблицы, кот. каким-то образом участвуют в запросе.4) условия, описанные в WHER, разделяются логич.операторами OR или AND.Левое и правое объединение (LEFT JOIN, RIGHT JOIN)При левом объединении будут выбраны строки, значения кот.совпадают в 2-ух таблицах, а также будут выбраны строки левой таблицы, значения кот. не совпали со значениями в правой. Т.О. левое объединение выбирает все строки из левой таблицы, вне зависимости от того совпадают ли значения в обоих таблицах.

Пример левого объединения:SELECT table1.*,table3.* FROM table1 LEFT JOIN table3.ON table1.kod_fio = table3.kod_fio; WHERE table3.kod_fio IS

26. Команды MySQL, реализующие вложенные запросы. Простые вложенные запросы, запросы EXISTS и NOT EXISTS, запросы IN и NOT IN. Примеры.Вложенный запрос – запрос, заключённый в круглые скобки и вложенный в предложение WHERE оператора SELECT или др.операторов, использующих предложение WHERE.Существует несколько способов создания вложенных запросов:а) простые вложенные запросы (обрабатываются снизу вверх). Они включаются в предложение WHERE с помощью операторов сравнения (=,< >,<,<=,>,>=). Первым обрабатывается вложенный запрос самого нижнего уровня. Результат его выполнения – единственные значения. Пример: SELECT book_id, name_book FROM books WHERE book_id = (SELECT book_id FROM uchet WHERE date=”2000-10-12”); limit 1. Выдача кода и названия книги, выданной 12 октября 2000 года. б) вложенные запросы в предложениях EXISTS и NOT EXISTS. Обработка запроса – «сверху вниз».SELECT book_id, name_book FROM books WHERE EXISTS (SELECT book_id FROM uchet WHERE data= “2011-10-12”). Выбираются коды и названия книг из справочника книг, а затем сравниваются с кодами книг в оперативной таблице учётв) вложенные запросы в предложениях IN и NOT IN. Обработка ведётся «снизу-вверх». Вложенный оператор SELECT возвращает значение из одного поля, кот.будут оцениваться во внешнем операторе SELECT.

SELECT kod_fio, fam FROM table1 WHERE kod_fio NOT IN (SELECT kod_fio FROM table 3); Список тех, кто не оплатил услуги. Из таблицы 3 выбираются коды фамилий. Из таблицы 1 – коды фамилий и фамилии, которых нет в выборке кодов из таблицы 3.

NULL // список неплательщиков. Результат: 2 | Петров.

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.