איך משרשרים שאילתה?

‏ • 31 בינואר, 2004

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

כללי המשחק



  • כל מה ששיך לשאילתה עצמה – אין צורך לשרשר
  • רק משתנים חיצוניים – משרשרים.

דוגמא 1

אני יודעת מראש שאני רוצה לשלוף את כל הרשומות בהן fld הוא 1, בלי שום קשר למה שקורה בדף ה-ASP שלי. בשאילתה הזו אין צורך לשרשר כלום:

sql="SELECT * FROM tbl WHERE fld=1"


דוגמא 2

הפעם, אני רוצה להשוות למשתנה fld משתנה מקומי בדף ה-ASP שלי. כלומר, עכשיו הוא לא תמיד יהיה 1, אלא יכול להשתנות. אני אגדיר משתנה, ואכניס לו ערך:

Dim val val=Request("val")

עכשיו יש לי משתנה val בדף ה-ASP, ואני רוצה להכניס אותו לשאילתה. בשביל זה אני צריכה לשרשר:

sql="SELECT * FROM tbl WHERE fld=" & val

ואם אני אדפיס את sql ע"י Response.Write, אני אקבל בדיוק את אותה השאילתה שבדוגמא הראשונה, רק שבמקום fld=1 יהיה כתוב fld=x, כש-x הוא המספר ש-val הכיל.

דוגמא 3

עכשיו אני רוצה לשלוף את כל הרשומות בהן fld=1, ו-name שווה למשתנה כלשהו:

sql="SELECT * FROM tbl WHERE fld=1 AND Name='" & Request("Name") & "'"

הדפסת המשתנה sql תתן לי דבר כזה:

SELECT * FROM tbl WHERE fld=1 AND Name='Inbal'

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

דוגמא 4

הפעם אני רוצה להשוות גם את fld וגם את name למשתנים, לכן אני אשרשר את שניהם:

sql="SELECT * FROM tbl WHERE fld=" & Request("val") & " AND Name='" & Request("Name") & "'"

התוצאה של הדפסת השאילתה הזו תהיה זהה לזו שבדוגמא 3. סדר הפעולות השוואת המשתנה ופתיחת מרכאות:

sql="

כתיבת קוד ה-SQL:

sql="SELECT * FROM tbl WHERE fld=

סגירת המרכאות, ושרשור המשתנה:

sql="SELECT * FROM tbl WHERE fld=" & val

ובמקרה של מחרוזת, להוסיף גרש פותח, ולשרשר גרש סוגר בצד השני של הערך:

sql="SELECT * FROM tbl WHERE Name='" & Name & "'"

וכך הלאה, עבור כל המשתנים שאתה רוצה לשרשר

בהצלחה!

תגיות: , , ,

תגובות בפייסבוק