СУБД/лекция 3 семестр 2
Содержание |
Литература
Встроенные функции PHP
Подкючение к БД
<?php $db = "alldb"; $user = "student"; $pass = "studentpass"; $server = "93.125.42.8"; $link = mysql_connect($server, $user, $pass); // Функция подключения к базе данных в переменной link храниться результат подключения if(!$link) die("cann't connect Mysql"); // Проверка успешности подключения else echo "Connect to ".$db." successfull"; mysql_select_db($db) or die("cann't connect Mysql".mysql_error()); //.......... // Выполнение запросов и работа программы //.......... mysql_close($link); ?>
- Задете имя базы
- Имя пользователя
- Пароль
- IP Сервера
- mysql_connect подключение к базе и создание сессии подключения
- Обязательно проверям статус выполения
- mysql_select_db выбор базы данных для работы (аналог use имя_базы)
- mysql_close($link); закрываем соединение (обязательно делать потому как число соединение обычно граничено для серверов)
Устновка кодировкmy sql_set_charset
Для версий (PHP 5 >= 5.2.3)
mysql_set_charset — Устанавливает кодировку клиента
Альтернативы для данной функции mysqli_character_set_name(). Добавлением charset в строку соединения, например charset=utf8. Описание :
- bool mysql_set_charset ( string $charset [, resource $link_identifier = NULL ] )
Если идентификатор соединения не был указан, используется последнее соединение, открытое mysql_connect(). Если такое соединение не было найдено, функция попытается создать таковое, как если бы mysql_connect() была вызвана без параметров. Если соединение не было найдено и не смогло быть создано, генерируется ошибка уровня E_WARNING.
- Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
- Данная функция требует MySQL версии 5.0.7 или выше.
Это наиболее предпочитаемый способ для смены кодировки. Использование mysql_query() в этих целях (например SET NAMES utf8) не рекомендуется. Смотрите раздел кодировка символов в MySQL для подробной информации и текущего соединения
<?php $db = "alldb"; $user = "student"; $pass = "studentpass"; $server = "93.125.42.8"; $link = mysql_connect($server, $user, $pass); if(!$link) die("cann't connect Mysql"); else echo "Connect to ".$db." successfull<br>"; mysql_select_db($db) or die("cann't connect Mysql<br>".mysql_error()); //........ mysql_set_charset(utf8); //.............. mysql_close($link); ?>
Выполение запросов
1) Вставка записей в базу данных
$query="INSERT INTO `таблицу` (`указываем поле`,`указываем поле`) VALUES ('любое значение','любое значение')"; $result=mysql_query($query); if($result==true) { echo "Успешно!"; } else { echo "Ошибка!<br>".mysql_error(); }
То есть вставка производится функцией INSERT. Если все прошло успешно, то mysql вернет результат true, или иначе — false.
Полей можно указывать хоть сколько, главное чтобы все они существовали в БД. То есть, к примеру существует таблица в которой есть поля «name» , «surname» и «city».
$query="INSERT INTO `users` (`name`,`surname`,`city`) VALUES ('Ruslan','Huzin','Kokshetau')"; $result=mysql_query($query); if($result==true) { echo "Успешно!"; } else { echo "Ошибка!<br>".mysql_error(); }
2) Удаление записей из базы данных
$query="DELETE FROM `users` WHERE `name`='Ruslan' "; $result=mysql_query($query); if($result==true) { echo "Успешно!"; } else { echo "Ошибка!<br>".mysql_error(); }
3) Изменение значений в базе данных
Также мы можем вносить изменения в уже существующие записи в таблице. К примеру нам надо заменить значение столбца name в строке, где столбец surname имеет значение Huzin.
$query="UPDATE `users` SET `name`='myname' WHERE `surname`='Huzin' "; $result=mysql_query($query); if($result==true) { echo "Успешно!"; } else { echo "Ошибка!<br>".mysql_error(); }
4) Получение значений из базы данных
Теперь самое интересное) Раз мы записали что-то, то ведь должны и получить обратно?)))
К примеру нам нужно достать из таблицы users всю строку где столбец name равен Ruslan.
Для этого нам потребуется чуть другой код, нежели в первых примерах.
$query="SELECT * FROM WHERE `name`='Ruslan' "; $result=mysql_query($query); if($result==true) { echo "Успешно!"; } else { echo "Ошибка!<br>".mysql_error(); } $data=mysql_fetch_array($result); /* Теперь в переменной хранятся данные из таблицы */
Тут нам потребовалась еще одна функция, для записи выбранных данных в переменную (массив) на php.
Для того что обратиться к выбранной строке, мы пишем так:
$data['имя столбца']
то есть, чтобы достать фамилию из выбранной строки (где имя было Ruslan), мы на вывод должны написать:
echo $data['surname'];
А при выборке из таблицы, писали SELECT *, эта звездочка означает что нужно выбрать все столбцы из строки.
Если нам надо, к примеру, выбрать только surname, пишем SELECT `surname`.
А для выборки сразу нескольких строк из таблицы, потребуется еще и цикл для их вывода. Это в том случае, если к примеру, строк со столбцом Ruslan будет несколько.
$query="SELECT * FROM WHERE `name`='Ruslan' "; $result=mysql_query($query); while($data=mysql_fetch_array($result)) { echo $data['name']."<br>".$data['surname']."<hr>"; }
Теперь на экран выведутся все строки у которых столбец name равен значению Ruslan.
Вывод значений на экран
- Выполняем запрос
- Помещаем результат в переменную !!! (учитывайте что результатом запроса должна быть разумная таблица не
10ГБ к примеру )
- Достаем построчно значения из переменной с помощью курсора mysql_fetch_array($result)
- Выводим нужные поля из строки
- Можно разделять поля используя html теги форматрирования
ОБЯЗАТЕЛЬНО после использования очищаем переменную в которой хранился результат выполения запроса mysql_free_result($result);
<?php $db = "alldb"; $user = "student"; $pass = "studentpass"; $server = "93.125.42.8"; $link = mysql_connect($server, $user, $pass); if(!$link) die("cann't connect Mysql"); else echo "Connect to ".$db." successfull<br>"; mysql_select_db($db) or die("cann't connect Mysql<br>".mysql_error()); mysql_set_charset(utf8); $query="select * from vkdb where sex = '2' limit 10;"; $result=mysql_query($query) or die(' Failed! ' . mysql_error()); /* while($data=mysql_fetch_array($result)) { echo $data['fname']."<br>".$data['sex']."<hr>"; echo "1111"; }*/ // Выводим результаты в html echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n"; // Освобождаем память от результата mysql_free_result($result); // Закрываем соединение mysql_close($link); ?>
Классы построения графиков
- Скачиваем класс
- страница загрузки pChart
- Прямая ссылка 1 pChart2.1.4.zip (19 January 2014)
- Прямая ссылка 2 pChart2.1.4.zip (19 January 2014)
Очень часто при создании каких-нибудь сервисов приходится рисовать различные графики. Например, если Вы делаете рекламную сеть, то можно построить зависимости количества переходов по рекламным материалам по дням. Если это какой-нибудь Интернет-магазин, то можно строить графики доходов магазина. Как рисовать графики в PHP, я разберу ниже.
Во-первых, можно всё делать самостоятельно, написав свою библиотеку. Здесь надо учитывать, что координаты в PHP идут на увеличение вправо и вниз, тогда как в математике они идут вправо и вверх. В остальном, ничего особо сложного.
Однако, если писать особо не хочется, то есть просто замечательнейшая библиотека, позволяющая строить самые разнообразные графики, диаграммы, гистограммы и прочее. Целая куча различных возможностей (подписывание осей, рисование нескольких графиков на одной оси, рисование порогов, отображение легенды и прочего) делают данную библиотеку по-настоящему универсальной.
Библиотека называется pChart: ознакомиться с документацией и скачать pChart.
<?php /* CAT:Pie charts */ /* pChart library inclusions */ include("./pChart/class/pData.class.php"); include("./pChart/class/pDraw.class.php"); include("./pChart/class/pPie.class.php"); include("./pChart/class/pImage.class.php"); /* Create and populate the pData object */ $MyData = new pData(); $MyData->addPoints(array(40,30,20),"ScoreA"); $MyData->setSerieDescription("ScoreA","Application A"); /* Define the absissa serie */ $MyData->addPoints(array("A","B","C"),"Labels"); $MyData->setAbscissa("Labels"); /* Create the pChart object */ $myPicture = new pImage(700,230,$MyData,TRUE); /* Draw a solid background */ $Settings = array("R"=>173, "G"=>152, "B"=>217, "Dash"=>1, "DashR"=>193, "DashG"=>172, "DashB"=>237); $myPicture->drawFilledRectangle(0,0,700,230,$Settings); /* Draw a gradient overlay */ $Settings = array("StartR"=>209, "StartG"=>150, "StartB"=>231, "EndR"=>111, "EndG"=>3, "EndB"=>138, "Alpha"=>50); $myPicture->drawGradientArea(0,0,700,230,DIRECTION_VERTICAL,$Settings); $myPicture->drawGradientArea(0,0,700,20,DIRECTION_VERTICAL,array("StartR"=>0,"StartG"=>0,"StartB"=>0,"EndR"=>50,"EndG"=>50,"EndB"=>50,"Alpha"=>100)); /* Add a border to the picture */ $myPicture->drawRectangle(0,0,699,229,array("R"=>0,"G"=>0,"B"=>0)); /* Write the picture title */ $myPicture->setFontProperties(array("FontName"=>"./pChart/fonts/Silkscreen.ttf","FontSize"=>6)); $myPicture->drawText(10,13,"pPie - Draw 3D pie charts",array("R"=>255,"G"=>255,"B"=>255)); /* Set the default font properties */ $myPicture->setFontProperties(array("FontName"=>"./pChart/fonts/Forgotte.ttf","FontSize"=>10,"R"=>80,"G"=>80,"B"=>80)); /* Create the pPie object */ $PieChart = new pPie($myPicture,$MyData); /* Define the slice color */ $PieChart->setSliceColor(0,array("R"=>143,"G"=>197,"B"=>0)); $PieChart->setSliceColor(1,array("R"=>97,"G"=>77,"B"=>63)); $PieChart->setSliceColor(2,array("R"=>97,"G"=>113,"B"=>63)); /* Draw a simple pie chart */ $PieChart->draw3DPie(120,125,array("SecondPass"=>FALSE)); /* Draw an AA pie chart */ $PieChart->draw3DPie(340,125,array("DrawLabels"=>TRUE,"Border"=>TRUE)); /* Enable shadow computing */ $myPicture->setShadow(TRUE,array("X"=>3,"Y"=>3,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10)); /* Draw a splitted pie chart */ $PieChart->draw3DPie(560,125,array("WriteValues"=>TRUE,"DataGapAngle"=>10,"DataGapRadius"=>6,"Border"=>TRUE)); /* Write the legend */ $myPicture->setFontProperties(array("FontName"=>"./pChart/fonts/pf_arma_five.ttf","FontSize"=>6)); $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20)); $myPicture->drawText(120,200,"Single AA pass",array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Align"=>TEXT_ALIGN_TOPMIDDLE)); $myPicture->drawText(440,200,"Extended AA pass / Splitted",array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Align"=>TEXT_ALIGN_TOPMIDDLE)); /* Write the legend box */ $myPicture->setFontProperties(array("FontName"=>"./pChart/fonts/Silkscreen.ttf","FontSize"=>6,"R"=>255,"G"=>255,"B"=>255)); $PieChart->drawPieLegend(600,8,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL)); $myPicture->autoOutput("l4.png"); //ob_flush(); ?>
В данном примере мы круговую диаграмму распределения, а затем выводим этот график в браузер. Также можно сохранять график в файл.
Возможностей у библиотеки масса, я лишь показал самые-самые базовые. Поэтому если Вам нужно построение графиков на сайте через PHP, то обязательно ознакомьтесь с документацией pChart.
Возможные ошибки и предупреждения сервера
- Cannot modify header information
- Ошибка «Невозможно изменить информацию заголовка» означает, что вы правили файлы (скорее всего, wp-config.php) вручную. И правили некорректно. Необходимо сохранять файлы в кодировке UTF-8 без метки BOM (byte order mark).
Warning: Cannot modify header information - headers already sent by (output started at /home/user/site.ru/public_html/wp-config.php:1) in /home/user/site.ru/public_html/wp-includes/pluggable.php on line 934
- Означает, что проблему вызывает 1-я строка файла wp-config.php.
- Убедитесь, что перед первой строкой <?php и после последней ?> нет пустых строк.
- Избегайте править файлы в Блокноте. Используйте «программистские» редакторы вроде PSpad, Notepad++ и им подобные, в которых метка BOM отключается. В Notepad++ для этого нужно выбрать в меню «Кодировки» пункт «Преобразовать в UTF-8 без BOM».