Triggerlər
SQL-də trigger cədvəllə əlaqədar database obyektinə verilən addır və cədvəldə müəyyən əməliyyatlar baş verərkən avtomatik işə düşür.Triggerlər bir çox məqsədlər üçün istifadə oluna bilər, məsələn cədvələ daxil edilən müəyyən məlumatları göstərmək yaxud
cədvəllərdə olan dəyişikliyi, yeniləmələri izləmək və s.
Verilənlərlər bazası ilə iş üçün Stored Procedures adlı prosedurlar vardır ki onlar müəyyən standart funksiyalardır.Bu funksiyaları biz özümüz işə sala bilərik.Necə ki obyektyönümlü proqramlaşdırma dillərində funksiyalar yaradılır eynilə MySQL-də də elə funksiyalar yaratmaq olur ki onlar Stored Procedures adlanır.Lakin
triggerlərin Stored Procedure -lardan fərqi ondan ibarətdir ki hər hansı bir cədvələ müəyyən bir dinləyici (listener) qurlaşdırılır.Bu dinləyici cədvəldə müəyyən proseslər gedən zaman həmin prosesə qoşulur vəavtomatik olaraq işə düşürlər.Əsasən cədvəllərdə gedən 3 əməliyyat zamanı (insert, update, delete) triggerlərdən istifadə olunur.
Triggerlərin AFTER və BEFORE adlı xüsusi konstruksiyaları vardır.Hansı ki onların köməyi ilə hər hansı cədvəldə müəyyən bir prosesin yerinə yetirilməsindən əvvəl və ya sonra triggerin işə düşməsini təmin etmək olar.
Trigger yaratmaq üçün create trigger, silmək üçün isə drop trigger komandaları istifadə olunur.
Birlikdə bir trigger yaradılması nümunəsinə baxaq.Keçən dərslərimizdə yaratdığımız developer cədvəlində cədvələ gedən insert prosesi üçün trigger yaradaq.
Qeyd edək ki trigger yaratmazdan əvvəl onun, dinləməni yazacağı cədvəli yaratmalıyıq.Bu cədvəl developer cədvəlindən dinləmə yazacağına görə onu uyğun olaraq
log_dev adlandıra bilərik.
create table if not exists log_dev(
id int not null primary key auto_increment, description varchar(50),
dev_id int);
Burada description sütunu developer cədvəlindəki name sütununa yazılacaq məlumatı , dev_id sütunu isə developer cədvəlində id sütununda generasiya olunacaq id-ni əks etdirəcəkdir.
İndi isə triggerimizi yarada bilərik:
create trigger my_trg AFTER insert on developer FOR EACH ROW insert into log_dev(description,dev_id) values(NEW.name,NEW.id);
triggerin qoşulmasını yoxlamaq üçün developer cədvəlimizə məlumat daxil (insert) edək:
insert into developer(name) values('Etibar');
sorğusu ilə cədvələ insert etdikdən sonra
select * from developer;yazaraq 7ci sətrin əlavə olunduğunu
görürük.
Triggerimizin log _devcədvəlinə nə yazdığına baxaq:
select * from log _dev;komandası ilə triggerimizin insert prosesini dinlədiyini görürük:
Yuxarıda yazdığımız trigger komandasının açıqlamasını daha dərindən qavramaq üçün aşağıdakı şəkilə nəzər yetirək:
trigger_body ( yəni 5 hissəsində) hissəsində yazılan NEWaçar sözü ilə developer cədvəlinin sütunlarına müraciət edirik.Yəni burada NEW sözü developer cədvəlindən link saxlayır.Aşağı sol hissədə trigger yaradılmasının sintaksisi əks olunmuşdur.
Yuxarıdakı trigger yaratmasorğusundatrigger time-ı vətrigger event -i dəyişərəkdigərkomandaları da özünüzyoxlayabilərsiniz.
Yaratdığımıztriggerisilməküçünyazacağımızkomanda
drop trigger my_trg;şəklində olacaq.
***
-
cu dərsin sonu
Növbəti dərsin mövzusu :
MySQL-in PHP ilə əlaqələndirilməsi.SQL injection
Diqqətiniz üçün təşəkkürlər
Mərhəmətli və Rəhimli Allahın adı ilə
MySQL Development Training 10-cu dərs (FINAL)
MySQL-in PHP ilə əlaqələndirilməsi.SQL
injection
Təlimçi : Etibar Vəzirov
Java Developer
PHP və Wampserver
PHP server tərəfdə işləyən bir script (hərfi mənada ssenari , təlimatlar seriyası,plan deməkdir) dilidir.Scriptlər sadə bir mətn editoru (məsələn notepad) ilə yazıla bilən mətn fayllarıdır. Hansı ki bu mətn fayllarında müəyyən script dilində təlimatlar yazılır.Script dilləri compile (byte koda yəni maşın dilinə çevirmə) mərhələsi tələb etməyən proqramlama dilləridir.Məsələn normalda Javascript -lə yazılmış proqramı run etməzdən əvvəl compile etməyə ehtiyac yoxdur.Lakin C dilində yazılan proqram run olunmazdan əvvəl compile olunmalıdır.
PHP server tərəfdə Javascript isə client tərəfdə işləyən script dilləridir.Burada server tərəf dedikdə web server, client tərəf dedikdə isə istifadəçi brauzeri nəzərdə tutulur.
PHP HTML ilə birlikdə istifadə olunmaq üçün hazırlanmışdır və kodları HTML daxilində yazıla bilir.PHP fayllar serverdə .php uzantısı şəklində saxlanır.
Brauzer serverdəki .php uzantılı fayla sorğu göndərdikdə web server bu faylı php çeviriciyə (interpreter) göndərir.Php çevirici faylda olan php kodlarını html kodlara çevirir və server
üzərindən brauzerə göndərir.Brauzer ona çatan fayl daxilindəki html kodlarını görür lakin php kodlarını görmür.
PHP dilinin sintaksisi Java və Perl dillərinin sintaksisinə çox oxşardır.
Kompyuterimizdə php proqramlar yazmaq üçün bizə aşağıdakılar lazımdır:
-
Web Server
-
PHP
-
Verilənlər bazası
-
Mətn editoru
-
Brauzer (web səyyah)
Mətn editoru olaraq windows -da notepad,Mac -da isə
TextMate istifadə edə bilərik. Lakin rahatlıq və
funksionallıq baxımından Notepad + + proqramını yükləyib onu istifadə etmək daha məsləhətlidir.
(Notepad + + yükləmə linki burada
https://notepad-plus-plus.org/download/v6.9.2.html)
Brauzer olaraq chrome və ya firefox istifadə etmək çox əlverişlidir. Web server olaraq isə Apache http server istifadə edəcəyik.
Və nəhayət verilənlər bazası olaraq MySQL istifadə edəcəyik.
Bütün bu proqramları bir bir yükləmək əvəzinə onların hamısını özündə cəmləşdirən proqramlardan istifadə etmək daha əlverişlidir.
Wampserver dediyimiz bu tip proqramlardandır. (daxilində Apache, PHP, MySQL, phpMyAdmin vardır)
Eynilə Linux ƏS üçün LAMP, Mac ƏS üçün də MAMP
proqramlarını istifadə etmək mümkündür.
Wampserver -i yükləmək üçün aşağıdakı linkə daxil olub download bölməsindən əməliyyat sisteminizə uyğun wampserver proqramını yükəyin :
http://www.wampserver.com/en/
Wampserver -i yüklədikdən sonra bəzi konfiqurasiya əməliyyatlarını yerinə yetirmək lazımdır.Üzərinə iki dəfə klik etdikdən sonra wampserver ikonu ekranda saat simgəsinin yanında görünəcəkdir. Wampserver-də iki servis olduğu üçün onlardan hər ikisi start olarsa
proqram ikonu yaşıl rəngdə,
ikisindən biri (MySQL və ya Apache) start olarsa,
proqram ikonu narıncı rəngdə, heç biri start olunmazsa isə sadəcə qırmızı rəngdə görünəcəkir.Biz əməliyyat zamanı hər iki servisin işləməsi vacib olduğuna görə ikonun yaşıl rəngdə görünməsi artıq mühitin hazır olduğuna işarədir.
Əgər servislərdən hər hansı biri məsələn MySQL start olmursa bu sistemdə başqa MySQL serverin start vəziyyətində olduğunu göstərir.Problemi həll etmək üçün sadəcə start menyusundan services (windows 8 -də services.msc şəklində axtarırıq) yazıb servislərə daxil olaraq avtomatik işə düşmüş MySQL servisi söndürmək lazımdır:
Bundan sonra wampserver simgəsinə klik edib bütün servisləri stop və yenidən start etməklə işi tamamlayırıq.
Apache açılan menyusundakı httpd.conf faylı Apache serveri üçün konfiqurasiya faylıdır. Eləcə də PHP açılan menyusunda php.ini və MySQL menyusunda my.ini faylları uyğun proqramlar üçün konfiqurasiya fayllarıdır.
phpMyAdmin proqramı PHP ilə yazılmış MySQL verilənlər bazasındakı əməliyyatları vizual olaraq yerinə yetirməyə imkan verən proqramdır.Menyudakı phpMyAdmin yazısına klik etdikdə brauzerdə phpMyAdmin açılacaq və bazalarımızı göstərəcəkdir.
Wampserver menyusundakı localhost yazısına klik etdikdə brauzerdə wampserver ana sehifesi açılacaq və bu səhifədə www root qovluğu daxilindəki proyektlər görüntülənəcəkdir.
Yuxarıdakı şəkillərdən göründüyü kimi www directory root qovlugu daxilində (c:\wamp\www) mysqltraining və test qovluqları olduğu üçün brauzerdə açılan localhost səhifəsində Your Projects başlığı altında bu qovluqların adları görünür.
İndi isə PHP-də ilk səhifəmizi yarada və ilk kodumuzu yaza bilərik.
c:\wamp\www daxilində myproject qovluğu yaradıb bu qovluğun içində bir text faylı yaradaq və onu notepad+ + editoru ilə açaq.Açılan pəncərədə file menyusundan save as seçərək bu faylı index.php adı ilə yadda saxlayaq.
Şəkildən görünür ki php kodlarını tag- ları arasında yazmaq lazımdır.PHP-də ekranda yazı yazdırmaq üçün echo komandasından istifadə olunur.
Bu yazdığımız kodu
işlətmək üçün brauzerə gəlib localhost/myproject və ya
localhost/myproject/index.php yazıb enter-ə vururuq:
Və artıq ilk php kodumuzu wampserver-lə işə saldıq.İndi isə MySQL və PHP-nin əlaqələndirilməsinə keçə bilərik.
PHP-nin 5.5-ci versiyasına qədər ən çox istifadə olunun APİ interfeyslərdən biri mysql_* idi. Burada
mysql_connect() - bazaya qoşulmaq
üçün
mysql_query() - sorğudan nəticə almaq
üçün
mysql_fetch_assoc() - bazadan assosiativ şəkildə massiv çəkmək üçün
mysql_close() - bazayla əlaqəni kəsmək üçün funkisiyaları istifadə olunurdu.
5.5 versiyasından sonra mysqli_* interfeysi istifadə edilir.Hansı ki yeni
mysqli_connect() mysqli_query() mysqli_fetch_assoc() mysqli_close()
funksiyalarına sahibdir və bu funksiyalar da yuxarıdakılarla eyni işi görürlər.mysqli interfeysini həmçinin obyektyönümlü php-də də istifadə etmək mümkündür.Obyektyönümlü üçün onun
$mysqli =new mysqli(); şəklində obyekti yaradılır. Bu obyektə linki $mysqli dəyişəni saxlayır.
mysqli -dan başqa böyük layihələrlə işləmək üçün ən çox istifadə olunun APİ PDO adlanır.PDO obyektyönümlü cəhətdən bir neçə verilənlər bazası modelləri ilə işləməyə imkan verir.
Verilənlər bazası ilə işləmək üçün yuxarıda sadaladığımız funksiyalar toplusunun PHP -nin konfiqurasiyasında necə yer aldığına baxaq.Öncə qeyd etdiyimiz kimi PHP-nin konfiqurasiya faylı olan php.ini faylı içində məhz mysql ilə işləmək üçün dll extension kitabxanalar toplusu vardır.Məsələn sırf mysqli interfeysi uzərindən işləmək üçün burada extension = php_mysqli.dll faylı vardır.
İndi isə yuxarıda sadaladığımız funksiyalardan istifadə etməklə real bir nümunədə PHP və MySQL-in necə inteqrasiya olunmasına baxaq.
Öncə create database new_db; sorğusu ilə new_db adında yeni database yaradırıq.Xatırladaq ki bunu həm phpMyAdmin proqramından, həm MySQL console -dan həm də mysql workbench-dən etmək mümkündür.
Sonra bu database-də employee adında bir cədvəl yaradaq:
create table employee(
id int not null primary key auto_increment, name varchar(20),
surname varchar(30), age tinyint unsigned,
mail varchar(20)) engine=innoDB charset=utf8;
Indi isə mysqli_* kitabxanasının funksiyalarından istifadə etməklə new_db bazasına qoşulub onun daxilindəki cədvələ sorğular göndərək.
Öncə www root qovluğu daxilində mysqltraining adlı qovluq yaradıb onun daxilində də form.html faylı yaradaq.Bu faylı Notepad+ + ilə açıb daxilində aşağıdakı kodları yazaq:
Yuxarıdakı kodu işlətmək üçün brauzerdə adres çubuğuna
localhost/mysqltraining/form.html yazmaq lazımdır:
Şəkildən də göründüyü kimi bu formu təsdiq etdikdə o show.php səhifəsinə yönələcək.Buna görə də indi show.php səhifəsini yaradıb php kodlarımızı və sql sorğularımızı yazmalıyıq.
form.html səhifəsini yaratdığımız kimi show.php səhifəsini də mysqltraining qovluğu daxilində yaradıb daha sonra notepad + + programı ilə açırıq. PHP səhifəsində kodlar bildiyimiz kimi tagları daxilində yazılır.
Formdan gələcək məlumatlarda simvolların düzgün şəkildə oxunabilməsi üçün kodlaşma sistemini set edirik:
header('content-type: text/html; charset=utf-8');
Daha sonra mysqli_connect() funkisiyasına host, username, password və baza adı paramertlərini verməklə bazayla qoşuluruq.(burada host :localhost, usrname : root, password: '', baza : new_db)
// connect to mysql
$conn = mysqli_connect("localhost","root","","new_db");
Baza ilə əlaqəyə $conn adı verdik.Və şərt yazırıq ki əgər bazaya qoşularkən səhv baş verərsə mysqli_connect_error() metodu vasitəsilə səhv məlum olsun:
//connection error if($conn === false){
die("Bazaya qosularken sehv bash verdi".mysqli_connect_error());}
Formdan gələcək məlumatların təhlükəsizliyini təmin etmək
üçün mysqli_real_escape_string metodunu istifadə edirik:
(sql injection -a qarşı işlədilən konstruksiyadır)
//escape user inputs for security
$name = mysqli_real_escape_string($conn,$_POST['name']);
$surname = mysqli_real_escape_string($conn,$_POST['surname']);
$age = mysqli_real_escape_string($conn,$_POST['age']);
$mail = mysqli_real_escape_string($conn,$_POST['mail']);
İndi isə bazaya sql sorğularımızı yaza bilərik:
//set values to sql query
$sql1 = "insert into employee(name,surname,age,mail) values('$name','$surname','$age','$mail')";
$sql2 = "select id,name,surname,age,mail from employee";
Birinci sorğu employee cədvəlinə məlumatlar daxil etmək, ikinci isə həmin cədvəldən məlumatları oxumaq üçün yazılmışdır.
mysqli_query(); funksiyası ilə yazdığımız sorğuların nəticələrini geri almış oluruq:
//get queries' results
$result1 = mysqli_query($conn,$sql1);
$result2 = mysqli_query($conn,$sql2);
Sorğunun uğurlu olub olmamağını aşağıdakı kodlarla öyrənə bilərik:
//check your result if($result1){
echo "
Dostları ilə paylaş: |