- •Введение.
- •Лекция 1. Введение в клиент-серверные субд.
- •Interbase sql Server. Общие сведения.
- •Платформы
- •Типы приложений
- •Файлы базы данных InterBase
- •Лекция 3. Триггеры и хранимые процедуры
- •Хранимые процедуры (Stored Procedures)
- •Терминаторы
- •Заголовок
- •Тело процедуры
- •Блок кода процедуры
- •Оператор присваивания
- •Условный оператор if… then … else
- •Оператор select
- •Цикл for select и suspend
- •Цикл while … do
- •Операторы insert, update, delete
- •Оператор execute procedure
- •Исключения
- •События и оператор post_event
- •Изменения и удаления хранимых процедур
- •Примеры создания и вызова хранимых процедур
- •Генераторы
- •Увеличение шага генератора
- •Триггеры
- •Переменные new и old
- •Реализация автоинкрементных ключевых полей
- •Лекция 4. Транзакции. Механизм транзакций
- •Атомарность (Atomicity)
- •Согласованность (Consistency)
- •Изолированность (Isolation)
- •Устойчивость (Durability)
- •Неявный и явный старт транзакций
- •Как транзакция работает
- •Уровни изолированности транзакций
- •Параметры транзакций
- •Компонентыдоступакданнымивизуальныекомпоненты МеханизмыдоступакБд
- •ПроблемырусскихбукввInterBase
- •Лекция5. Основы языка php. Функции php для работы с субд История php
- •Возможности php
- •Основнойсинтаксис
- •Разделениеинструкций
- •Комментарии
- •Переменные,константыиоператоры
- •Переменные
- •Константы
- •Операторы
- •Типыданных
- •Типboolean(булевилилогическийтип)
- •Типinteger(целые)
- •Типfloat(числасплавающейточкой)
- •Типstring(строки)
- •Одинарныекавычки
- •Двойныекавычки
- •Типarray(массив)
- •Определениеприпомощиarray()
- •Определениеспомощьюсинтаксисаквадратныхскобок
- •Типobject(объекты)
- •Типresource(ресурсы)
- •Решениезадачи
- •Построениеинтерфейсадлядобавленияинформации
- •Установкасоединения
- •Выборбазыданных
- •Получениеспискаполейтаблицы
- •Отображениеспискаполейвhtml-форму
- •Записьданныхвбазуданных
- •Отображениеданных,хранящихсявMySql
- •Заключение
Отображениеданных,хранящихсявMySql
Чтобыотобразитькакие-тоданныевбраузереспомощьюPHP,нужносначалаполучитьэтиданныеввидепеременныхPHP.ПриработесMySQLбезпосредника(такого,какPHP)выборкаданныхпроизводитсяспомощьюкомандыSELECTязыкаSQL:
mysql>SELECT*FROMArtifacts;
Впредыдущейглавемыговорили,чтолюбойзапрос,втомчислеинавыборку,можноотправитьнасерверспомощьюфункцииmysql_query();Тамунасстояланемногодругаязадача-получитьданныеизформыиотправитьихспомощьюзапросанавставкувбазуданных.Результатомработыmysql_query()таммоглобытьтолькоодноизвыражений,TRUEилиFALSE.Теперьжетребуетсяотправитьзапроснавыборвсехполей,арезультатотобразитьвбраузере.Издесьрезультат-этоцелаятаблицазначений,аточнее,указательнаэтутаблицу.Такчтонужныкакие-тоаналогифункцииmysql_field_name(),толькочтобыониизвлекалиизрезультатазапросанеимя,азначениеполя.ТакихфункцийвPHPнесколько.Наиболеепопулярные-mysql_result()иmysql_fetch_array().
Синтаксисmysql_result
смешанноеmysql_result(ресурсresult,
целоеrow[,смешанноеfield])
mysql_result()возвращаетзначениеоднойячейкирезультатазапроса.Аргументfieldможетбытьпорядковымномеромполяврезультате,именемполяилиименемполясименемтаблицычерезточкуtablename.fieldname.Еслидляимениполявзапросеприменялсяалиас('selectfooasbarfrom...'),используйтееговместореальногоимениполя.
Работаясбольшимирезультатамизапросов,следуетзадействоватьоднуизфункций,обрабатывающихсразуцелыйрядрезультата(например,mysql_fetch_row(),mysql_fetch_array()ит.д.).Таккакэтифункциивозвращаютзначениенесколькихячеексразу,ониНАМНОГОбыстрееmysql_result().Крометого,нужноучесть,чтоуказаниечисленногосмещения(номераполя)работаетнамногобыстрее,чемуказаниеколонкииликолонкиитаблицычерезточку.
Вызовыфункцииmysql_result()недолжнысмешиватьсясдругимифункциями,работающимисрезультатомзапроса.
Синтаксисmysql_fetch_array
массивmysql_fetch_array(ресурсresult
[,целоеresult_type])
Этафункцияобрабатываетрядрезультатазапроса,возвращаямассив(ассоциативный,численныйилиоба)собработаннымрядомрезультатазапроса,илиFALSE,еслирядовбольшенет.
mysql_fetch_array()-эторасширеннаяверсияфункцииmysql_fetch_row().Помимохранениязначенийвмассивесчисленнымииндексами,функциявозвращаетзначениявмассивесиндексамипоназваниюколонок.
Еслинесколькоколонокврезультатебудутиметьодинаковыеназвания,будетвозвращенапоследняяколонка.Чтобыполучитьдоступкпервым,следуетиспользоватьчисленныеиндексымассиваилиалиасывзапросе.Вслучаеалиасовименноихвынесможетеиспользоватьнастоящиеименаколонок,как,например,несможетеиспользовать"photo"вописанномнижепримере.
selectArtifacts.photoasart_image,
Persons.photoaspers_image
fromArtifacts,Persons
Пример11.1.Запроссдублирующимисяименамиколонок
Важнозаметить,чтоmysql_fetch_array()работаетНЕмедленнее,чемmysql_fetch_row(),ипредоставляетболееудобныйдоступкданным.
Второйопциональныйаргументresult_typeвфункцииmysql_fetch_array()являетсяконстантойиможетприниматьследующиезначения:MYSQL_ASSOC,MYSQL_NUMиMYSQL_BOTH.ЭтавозможностьдобавленавPHP3.0.7.Значениемпоумолчаниюявляется:MYSQL_BOTH.
ИспользуяMYSQL_BOTH,получиммассив,состоящийкакизассоциативныхиндексов,такиизчисленных.MYSQL_ASSOCвернеттолькоассоциативныесоответствия,аMYSQL_NUM-толькочисленные.
Замечание:именаполей,возвращаемыеэтойфункцией,регистрозависимы.
ТеперьотобразимданныеизArtifactsввидетаблицывбраузере:
<?
/*сначаладелаемтоже,чтоираньше:устанавливаем
соединение,выбираембазуиполучаемсписокичислополейвтаблицеArtifacts*/
$conn=mysql_connect("localhost","nina","123");
$database="book";
$table_name="Artifacts";
mysql_select_db($database);
$list_f=mysql_list_fields($database,$table_name);
$n1=mysql_num_fields($list_f);
//сохранимименаполейвмассиве$names
for($j=0;$j<$n1;$j++){
$names[]=mysql_field_name($list_f,$j);
}
$sql="SELECT*FROM$table_name";//создаемSQLзапрос
$q=mysql_query($sql,$conn)ordie();//отправляем
//запроснасервер
$n=mysql_num_rows($q);//получаемчислострокрезультата
//рисуемHTML-таблицу
echo" <TABLEBORDER=0CELLSPACING=0width=90%
align=center><tr><TDBGCOLOR='#005533'align=center>
<fontcolor='#FFFFFF'><b>$table_name</b></font></td>
</tr></TABLE>";
echo"<tablecellspacing=0cellpadding=1border=1
width=90%align=center>";
//отображаемназванияполей
echo"<tr>";
foreach($namesas$val){
echo"<thALIGN=CENTERBGCOLOR='#C2E3B6'>
<fontsize=2>$val</font></th>";
}
//отображаемзначенияполей
echo"</tr>";
for($i=0;$i<$n;$i++){//перебираемвсестрокив
//результатезапросанавыборку
echo"<tr>";
foreach($namesas$val){//перебираемвсе
//именаполей
$value=mysql_result($q,$i,$val);//получаем
//значениеполя
echo"<td><fontsize=2> $value</font></td>";
//выводимзначениеполя
}
echo"</tr>";
}
echo"</table>";
Листинг11.1.1.ОтображениеданныхизArtifactsввидетаблицывбраузере
Сделаемтожесамоеспомощьюmysql_fetch_array():
<?
/*...началотоже,чтоивпредыдущемпримере*/
//отображаемзначенияполей
//получаемзначениеполяввидеассоциативногомассива
while($row=mysql_fetch_array($q,MYSQL_ASSOC)){
echo"<tr>";
foreach($namesas$val){
echo"<td><fontsize=2> $row[$val]</font></td>";
//выводимзначениеполя
}
echo"</tr>";
}
echo"</table>";
?>
Листинг11.1.2.ОтображениеданныхизArtifactsввидетаблицывбраузере.Вариант2