- •Введение.
- •Лекция1.Введениевклиент-серверныеСубд.
- •InterbaseSqlServer.Общиесведения.
- •Платформы
- •Типыприложений
- •ФайлыбазыданныхInterBase
- •Лекция3.Триггерыихранимыепроцедуры
- •Хранимыепроцедуры(StoredProcedures)
- •Терминаторы
- •Заголовок
- •Телопроцедуры
- •Блоккодапроцедуры
- •Операторприсваивания
- •УсловныйоператорIf…then…else
- •ОператорSelect
- •ЦиклForselecTиSuspend
- •ЦиклWhile…do
- •ОператорыInsert,update,delete
- •ОператорExecuteprocedure
- •Исключения
- •Событияиоператор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