arrow

SQL למסדי נתונים של CGI פרק 3 - ממשקי

DBI API

אז איך להשתמש במודול API ?

כמו בכל מודול של Perl 5 צריך פשוט להשתמש במילת המפתח  "USE".

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

תארו לכם את המקרה הבא, שבו נחבר למסד הנתונים שם של מקור הנתונים “My Company", שם משתמש "selena", סיסמא  “12mw_1” ומניע ODBC. שים לב, ששם המניע ODBC מוצמד כתווית לתחילת שם מסד הנתונים.

use DBI;
$dbHandle = (DBI->connect('DBI:ODBC:MyCompany', 
                          'selena", 
                          '12mw_l'));
		

בהמשך נראה איך לתת שם למסד נתונים. למרות זאת, אתה יכול לתאר לעצמך שלא משנה באיזה מסד נתונים אתה משתמש ולא משנה באיזו סביבה, תהיה מסוגל להגדיר את הערכים הללו ולהשתמש בהם.

ברגע שיצרת אוביקט לטיפול במסד נתונים, אפשר לעשות כמה דברים עם האוביקט הזה. קרוב לודאי שאתה תשלח פקודות SQL למסד הנתונים דרך ה"מטפל במסד נתונים". לשם כך עליך ליצור אוביקט שיטפל בפקודות על ידי קריאה ל – ()prepare שיבוצע על האוביקט שמטפל במסד הנתונים, ואחר כך לקרוא ל- ()execute, שיבוצע על האוביקט שמפטל בפקודות. תבחנו את הקוד הבא:

use DBI;
$dbHandle = (DBI->connect('DBI:ODBC:MyCompany', 
                     'selena", 
                     '12mw_l'));
$sql = "SELECT * FROM Employees";
$statementHandle = $dbHandle->prepare($sql);
$statementHandle->execute() || 
               die $statementHandle->errstr;
		

ברגע ש- sql נשלח למסד הנתונים, מודול DBI ישמור את התוצאות. לקבלת התוצאות אפשר להשתמש בכל אחת מפרוצדורות/שגרות לטיפול בפקודות. אחת הפרוצדורות/שגרות הנפוצות ביותר היא ()fetchall_arrayref שמחזירה את כל השורות המוחזרות ממסד הנתונים בתוך מצביע למערך של מצביעים לשורות. תסתכלו על קטע קוד הבא:

use DBI;
$dbHandle = (DBI->connect('DBI:ODBC:MyCompany', 
                     'selena", 
                     '12mw_l'));
$sql = "SELECT * FROM Employees";
$statementHandle = $dbHandle->prepare($sql);
$statementHandle->execute() || 
              die $statementHandle->errstr;
$arrayRef = $statementHandle->fetchall_arrayref;
		

לבסוף, כשסיימת לטפל בנתונים ואתה רוצה לנתק את החיבור למסד הנתונים, עליך להשתמש בפרוצדורה/שגרה ()disconnect של האוביקט לטיפול במסד נתונים:

$dbh->disconnect();
		

בסוף חלק זה מובאים כמה דוגמאות של שימוש ב- DBI בתסריטי CGI כדי שתוכל לראות איך אפשר לבנות משהו תוך שימוש בשגרות הללו.

מטודות כלליות של מחלקת DBI:

שם

שימוש

תאור

connect()

$dbHandle = DBI-> connect (DBI:$driverName:$dataSource, $usrName, $passwrd);

$dbHandle = DBI-> connect ($dataSource, $usrName, $passwrd, $driverName);

מתודה זו מבצעת התקשרות למקור נתונים נתון ומחזירה אובייקט "המטפל במסד הנתונים".

שים לב, אם ציינת בפרמטר הרביעי את שם הדרייבר, אזי אין צורך לתייג את DBI:$driverName ואת $dataSource.

available_drivers()

@drivers = DBI-> available_drivers();

@drivers = DBI-> available_drivers ($warnFlag);

כפי שניתן לראות מתודה זו מחזירה מערך דרייברים שהמודול יכול לראות.

היא מוצאת את הדרייברים תוך סריקת מערך ה- @INC וחיפוש אחר מודולי DBD. אם נתקלים בערך אמת בתור הפרמטר לא יופיעו הודעות על דרייברים חבויים.

data_sources()

@dataSources = DBI-> data_sources($driver);

מחזירה רשימה של מקורות נתונים הזמינים לדרייבר נתון, אם הוא תומך במתודה.

trace()

DBI->trace ($level);

DBI->trace ($level, $file);

מספקת אפשרות מעקב, כך שהקובץ $file משורשר אם המידע אותו מחפשים. דרוג ברמה 0 הופך את המעקב לבלתי פעיל ודרוג ברמה 2 מספק מעקב מפורט.

neat()

$neatvalue = DBI::neat($value, $maxLength);

מפרמטת את הערך המצוין: שמה את המחרוזות במרכאות, ערכים לא מוגדרים יוחלפו ב- “undef”, תוים לא ניתנים להדפסה יוחלפו ב- “.”, מחרוזת שאורכה גדול יותר מ- $maxLength תקוצץ ותסתיים ב- "...".

neat_list()

$delimitedList = DBI::neatList(\@listRef, $maxlength, $delimiter);

מפרמטת את המערך על ידי הקריאה ל- neat()עבור כל אבר ויצירת מחרוזת על ידי צרוף האברים עם התוחם שהוגדר (delimiter).

dump_results()

$dbRows = DBI::dump_results ($statementHandle, $maxLength, $lineSeparator, $fieldSeparator, $fileHandle);

מקבלת את כל השורות מהאובייקט לטיפול בהצהרות, קוראת ל- neat_list() עבורת על כל שורה ומדפיסה את התוצאות ל- $filehandle שמוגדר להיות <STDOUT> בברירת מחדל.

 

מתודות כלליות

שם

שימוש

תיאור

err()

$result = $handle->err();

מקבלת את קוד השגיאה שמוחזר על ידי מסד הנתונים.

errstr()

$result = $handle->errstr();

מקבלת את הודאת השגיאה שמוחזרת על ידי מסד הנתונים.

state()

$state = $handle->state();

מקבלת את קוד השגיאה של SQLSTATE.

trace()

$handle->trace ($level);

$handle->trace ($level, $file);

מספקת אפשרות מעקב, כך שהקובץ $file משורשר אם המידע אותו מחפשים. דרוג ברמה 0 הופך את המעקב לבלתי פעיל ודרוג ברמה 2 מספק מעקב מפורט.

מתודות לטיפול במסד נתונים

שם

שימוש

תיאור

prepare()

$statementHandle = dataSourceHandle -> prepare($sql);

מכינה פקודה לביצוע.

do()

$rowCount = $databaseHandle -> do($sql);

מכינה ומבצעת פקודת SQL ומחזירה את מספר השורות המוחזרות.

commit()

$rowCount = $databaseHandle -> commit();

במידה ואפשר הופכת את סדרת השינויים האחרונים במסד הנתונים לקבועים.

rollback()

$rowCount = $databaseHandle -> rollback()

מבטלת את השינויים שלא בוצעו.

 

disconnect()

$rowCount = $databaseHandle ->disconnect()

מתנתקת ממסד הנתונים.

 

ping()

$rowCount = $databaseHandle - > ping()

מנסה לבדוק האם השרת של מסד הנתונים עדיין זמין.

 

quote()

$sql = $databaseHandle - > quote($string);

הופכת מחרוזת לפקודת SQL.

מתודות לטיפול בפקודות

שם

שימוש

תיאור

execute()

$value = $statementHandle -> execute();

מריצה את הפקודה שהוכנה.

 

fetchrow_arrayRef()

$arrayRef = $statementHandle -> fetchrow_arrayref();

מקבלת את שורת נתונים הבאה כמצביע (refference) למערך שמכיל את ערכי העמודות.

fetchrow_array()

@array = $statementHandle -> fetchrow_array();

מקבלת במערך את שורת הנתונים הבאה.

 

fetchrow_hashref()

$hashRef = $statementHandle -> fetchrow_hashRef();

מקבלת את שורת הנתונים הבאה, שבה המפתחות ל- hash reference הם שמות העמודות, והערכים הם ערכי העמודות.

fetchall_arrayref()

$reference = $statementHandle -> fetchall_arrayref()

מקבלת את כל השורות כמצביעים במערך מצביעים.


arrow מודול DBI
תוכן עניינים
צרוף כל החלקים arrow


פרק 1 -> פרק 2 -> פרק 3 -> פרק 4 -> פרק 5 ->