Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции БДиСУБД.docx
Скачиваний:
17
Добавлен:
19.11.2019
Размер:
494.91 Кб
Скачать

Отображениеданных,хранящихсяв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