מסדי נתונים / בחירת מסד הנתונים האידיאלי / DBI ממשק מסד הנתונים של פרל


DBI ממשק מסד הנתונים של פרל


DBI הוא אחד המודולים היותר פופולריים של פרל.
אין פלא, הוא השער המחבר בין פרל לבין מסדי נתונים שפועלים עם SQL.
הוא מאפשר לבצע פעולות ניהול מסד נתונים ישירות מתוך פרל, ויותר חשוב, מאפשר לכלול הצהרות SQL בתוך קוד הפרל.
לכל מסד נתונים יש מנוע משלו DBD- שמקשר בין DBI לבין שרת מסד הנתונים, עקב כך תוכניות פרל שנכתבו עם DBI הן יחסית ניידות.
אתם יכולים לעבור משימוש במסד נתונים אחד למשנהו, בלי לשנות יותר מכמה שורות בודדות בקוד.
כדי להיכנס לעולם המופלא של DBI, כל מה שעליך לכלול הוא שורה האומרת

" use DBI"

אם עקבת אחרי כל ההוראות שנתתי פה מהשיעור הראשון ואילך, אין שום צורך להוסיף את השורה הזו, היא כבר נכללת בשורת האתחול של.ePerl.

התכנות המעשי ב DBI הוא לוגי ושגרתי כך שיהיה לי קל מאוד להסביר לכם את העיקרון.
דבר ראשון, צור אובייקט שידאג לטפל במסד הנתונים. האובייקט הזה ישמש אותך כשתכתוב SQL, מכיוון שהוא מגדיר את מסד הנתונים.

$dbh=DBI->connect('DBI:mysql:test:localhost', '','') or die $DBI::errstr;


שלושת הפרמטרים המעורבים ב DBI->connect הם:

$database, $username ו $password מכיוון שאנחנו משתמשים במסד נתונים בשם
"test" שיצרנו בשיעור הקודם, אין צורך שנגדיר שם משתמש וסיסמא.
אתם יכולים להשתמש במחרוזת הקבועה DBI:mysql:test:localhost בתור פרמטר הdatabase$ אבל רק במקרה המוגבל הזה.
אם תחליט לעשות דברים אחרים במדי נתונים אחרים, עליך לפנות לקובצי העזרה כדי למצוא תוכן אחר לפרמטר.
בשלב הבא, כתוב כמה שורות בSQL והכנס אותן לתוך משתנה. למשל:

$SQL = <<"EOT"; select title, released from albums where artist = 'Genesis' order by released EOT


המשתנה הזה ישמש כמעין "curser" לצד הלקוח. ה "curser" הוא שאילתת SQL מתקדמת שמריצה שורה אחת בכל פעם. שה לא באמת מה שקורה, למעשה השאילתא מתבצעת כיחידה אחת, אבל לתוכנית ה Perl שלנו יכולה לעבור אחר התוצאות שורה אחר שורה, מה שנותן את התחושה שמדובר ב"curser" למתכנתי אפליקציות כמונו.
ה"curser" מוגדר ומופעל כך:

$cursor = $dbh->prepare($SQL); $cursor->execute;


עכשיו נעבור על כל הקוד, שורה שורה:

while ( @columns = $cursor->fetchrow ) { print ( ( map { "[$_]" } @columns ) , "\n"); }


כל מה שאני משיג עם הקוד הזה הוא הדפסת כל כניסה במערך הטורים - הערכים מגיעים משורת $cursor בעזרת המתודה הנקראת $cursor->fetchrow שנמצאת בתוך סוגריים מרובעים [ ].
כמובן שיכולתי לכלול כל פקודה בתוך לולאת ה while, לא רק פקודת הדפסה. לסיום, כדי למחזר את המשאבים ולהתנתק מהמערכת בצורה נקיה, עלינו לסגור את כל ה"cursor" ואת המשתנה שהגדרנו.

$cursor->finish; $dbh->disconnect;


אם פקודת הSQL שברצונך לבצע היא לא פקודת SELECT, אין סיבה שתטרח עם לולאת ה-while ( $cursor->fetchrow ) { ... }. מכיוון שלא ביקשת שמידע יחזור אליך, אין שום סיבה לעבור שורה אחר שורה בתהליך.

בואו נניח שלא מחקתי את כל המידע על תקליטי הג'נסיס שנמצאים אצלי במסד הנתונים.
אני יכול להשתמש בכל מה שהזכרתי עד עכשיו ולהשתמש בו לצורך יצירת תוכנית ePerl מוגמרת:

<? use DBI; #לא קיים startup.perl למקרה שהקובץ my $dbh = DBI->connect('DBI:mysql:test:localhost', '','') or die $DBI::errstr; my $SQL = <<"EOT"; select title, released from albums where artist = 'Genesis' order by released EOT my $cursor = $dbh->prepare($SQL); $cursor->execute; !>// <HTML> <HEAD><TITLE>ePerl/DBI/HTML Integration Example</TITLE></HEAD> <BODY> <P> The results returned from the database query regarding Genesis albums in my database are ... <HR> <TABLE BORDER> <TR><TH COLSPAN=2>Albums by Genesis</TH></TR> <TR><TH>Title</TH><TH>Release Date</TH></TR> <? my @columns; while ( @columns = $cursor->fetchrow ) { print ( "<TR>",( map { "<TD>$_</TD>" } @columns ) , "</TR>\n"); } !>// </TABLE> <HR> <P>


וזהו זה..

</BODY> </HTML> <? $cursor->finish; $dbh->disconnect; !>//


תוכלו לראות את תוצאת התוכנית (הצפויות) כאן ….



עמוד הבא: הדרך שלפנינו >>




מבט כללי
שעור 1
הטכנולוגיה הלא נכונה
לבעיה הלא נכונה

דמיין את כל האנשים
(נכנסים לאתר שלך)

מה האופציות שלי?
למה באינטרנט?
אבל איך?
משהו ללעוס בדרך
שעור 2
הכרות עם שדה
המשחקים

Windows NT לעומת
Linux

התקנת לינוקס והתוכניות
הנלוות

ציפיות
שעור 3
מבוא
MySQL ושאר עניני
שרת/מסד נתונים

MySQL,SQL,DDL
ו-DML

סיכום
שעור 4
פילוסופית ה-Embedded
Web-Programming

ePerl-כשפרל פוגשת את
HTML

DBI-ממשק מסד הנתונים
של פרל >
הדרך שלפנינו
שעור 5
מתחילים לעבוד
CGI.pm הבלתי נמנע
Escape Sequences
ומסד הנתונים שלך

הטבעת ביטויים יחסיים
במחרוזת
Here-Document

הטבעת תת-רוטינות
מחברים את הכל
מטפלים בטפסים עם
שאילתות SQL

מעבדים את תוצאות
הטופס עם-CGI.pm