איך משרשרים שאילתה?
אחד הדברים בהם מתכנתים מתחילים הכי מסתבכים, הוא שרשור המשתנים לשאילתות.
מאמר זה בא כדי להשליט קצת סדר בעניין…
כללי המשחק
- כל מה ששיך לשאילתה עצמה – אין צורך לשרשר
- רק משתנים חיצוניים – משרשרים.
דוגמא 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 & "'"
וכך הלאה, עבור כל המשתנים שאתה רוצה לשרשר
בהצלחה!
תגובות בפייסבוק