SQL למסדי נתונים של CGI פרק 3 - ממשקי
DBI API
אז איך להשתמש במודול API ?
כמו בכל מודול של Perl 5 צריך פשוט להשתמש במילת המפתח "USE".
ברגע שמודול DBI נטען אפשר לאתחל את החיבור של מסד הנתונים. יצירת קשר דורשת יצירה של אובייקט ה"מטפל" במסד נתונים תוך שימוש ב- DBI כדי לקשור למסד נתונים הנתון: שם של מקור הנתונים, משתמש במסד הנתונים, סיסמת מסד הנתונים ומניע מסד הנתונים.
תארו לכם את המקרה הבא, שבו נחבר למסד הנתונים שם של מקור הנתונים “My Company", שם משתמש "selena", סיסמא “12mw_1” ומניע ODBC. שים לב, ששם המניע ODBC מוצמד כתווית לתחילת שם מסד הנתונים.
ברגע שיצרת אוביקט לטיפול במסד נתונים, אפשר לעשות כמה דברים עם האוביקט הזה. קרוב לודאי שאתה תשלח פקודות SQL למסד הנתונים דרך ה"מטפל במסד נתונים". לשם כך עליך ליצור אוביקט שיטפל בפקודות על ידי קריאה ל –
()prepare שיבוצע על האוביקט שמטפל במסד הנתונים, ואחר כך לקרוא ל-
()execute, שיבוצע על האוביקט שמפטל בפקודות. תבחנו את הקוד הבא:
ברגע ש- sql נשלח למסד הנתונים, מודול DBI ישמור את התוצאות. לקבלת התוצאות אפשר להשתמש בכל אחת מפרוצדורות/שגרות לטיפול בפקודות. אחת הפרוצדורות/שגרות הנפוצות ביותר היא
()fetchall_arrayref שמחזירה את כל השורות המוחזרות ממסד הנתונים בתוך מצביע למערך של מצביעים לשורות.
תסתכלו על קטע קוד הבא:
לבסוף, כשסיימת לטפל בנתונים ואתה רוצה לנתק את החיבור למסד הנתונים, עליך להשתמש בפרוצדורה/שגרה
()disconnect של האוביקט לטיפול במסד נתונים:
בסוף חלק זה מובאים כמה דוגמאות של שימוש ב- DBI בתסריטי CGI כדי שתוכל לראות איך אפשר לבנות משהו תוך שימוש בשגרות הללו.
שם |
שימוש |
תאור |
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() |
מקבלת את
כל השורות
כמצביעים
במערך
מצביעים. |