«…лишь недалекие люди боятся конкуренции, а люди подлинного творчества ценят общение с каждым талантом…» А. Бек, Талант.

СУБД/лекция 3 семестр 2

Материал из Wiki
Перейти к: навигация, поиск

Содержание

Литература

Встроенные функции 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 или выше.
  • 200px-Yes check.png Это наиболее предпочитаемый способ для смены кодировки. Использование 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.

Вывод значений на экран

  • Выполняем запрос
  • Помещаем результат в переменную !!! (учитывайте что результатом запроса должна быть разумная таблица не Nuvola apps error.png10ГБ к примеру )
  • Достаем построчно значения из переменной с помощью курсора mysql_fetch_array($result)
  • Выводим нужные поля из строки
  • Можно разделять поля используя html теги форматрирования
  • 200px-Yes check.png ОБЯЗАТЕЛЬНО после использования очищаем переменную в которой хранился результат выполения запроса 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);
?>

Классы построения графиков

Очень часто при создании каких-нибудь сервисов приходится рисовать различные графики. Например, если Вы делаете рекламную сеть, то можно построить зависимости количества переходов по рекламным материалам по дням. Если это какой-нибудь Интернет-магазин, то можно строить графики доходов магазина. Как рисовать графики в 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).
Имя файла, приводящего к ошибке, и номер строки указаны в "output started at". Например:
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».

PHP классы