
הטקסט המלא של הדקות הראשונות בהרצאה «שימוש ב-Escape Characters ב-MySQL - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו רוצים לראות איך המערכת עצמה יכולה לטפל בבעיה של ה-Escaped Character הזאת. אז לצורך כך אנחנו צריכים לעשות איזשהו שינוי ממש קטן בדל ולגשת לפונקציית Execute Async ולהגיד לה תשמעי בואי תקבלי גם את השאילתה וגם מערך שנקרא values.
אני יכול לקרוא לו כמובן בכל שם ואז שאילתת query יש לה עוד העמסה, שימו לב, יש לה כמה העמסות. העמסה אחת היא אומרת תביאו לי את ה-string ואת ה-callback.
העמסה נוספת, האמת היא פה, זה תביאו לי את ה-string של ה-SQL ו-values, ואז את ה-callback. אז בואו ניתן לפרמטר שני values.
מה זה ה-values הזה? ה-values זה מערך שבכל הערכים שאנחנו רוצים לשבץ בתוך ה-SQL והשאילתה query, כלומר הפונקציה query אוטומטית תיקח את הערכים האלה ותעשה להם escaped character אוטומטית.
כל מה שאנחנו צריכים לעשות זה רק להביא את הערכים לפה במקום לשאילתה. אבל השאילתה צריכה להיות טיפה אחרת. בואו נסתכל איך אפשר לעשות את זה. אז קודם כל זה העדכון הקטן שאנחנו עושים בדל.
דרך אגב, אותו דל בדיוק אם השינוי הזה תומך גם בשאילתות הרגילות שאנחנו עושים, פשוט אם יש פה undefined אז המערכת מתעלמת לחלוטין ב-undefined אם לא שלחנו value, כי כרגע בפרודקטס לוג'יק אנחנו קוראים לפונקציה הזאת, אני לא בפרודקטס לוג'יק, פה,
אנחנו קוראים ל-execute ושולחים לה רק את השאילתה והכל בסדר כי אז ה-value זה יהיה undefined וה-query תוכל לעבוד בצורה הזאת. אבל אנחנו צריכים עכשיו כן לשלוח את ה-values בשביל לטפל בסיטואציה.
אז בואו רגע ניפטר מהקונטרולר פה, הקונטרולר הוא לא משנה לנו ולמעשה אני לא רוצה למחוק את כל הדוגמה הזאת. אז מה שאני אעשה, אני אגדיר שזה product logic 1, בואו נראה רק שהוא שינה לי את זה ל-product logic הוא לא שינה לי, זה אחד ובואו נשכפל אותו לפרודקטס לוג'יק 2 כי יש לנו פה ממש שינוי גדול שאנחנו צריכים לבצע.
בואו נשכפל את כל זה, נשים את 1 בהערה ואנחנו כרגע מתחברים לפרודקטס לוג'יק 2. 1 עובד פרפקט הוא מבצע את הקוד שלו אנחנו יכולים להשתמש בו הכל בסדר.
2 הולך להיות משהו קצת אחר. כל שאילתא שמכילה דאטה, בואו רגע טיפה נקטין את כל הכתב הזה. כל שאילתא שמכילה דאטה, כשאנחנו רוצים לשלב, הנה אנחנו רואים פה את ה-ID לדוגמה, אז אנחנו רוצים לקרוא לשאילתא בצורה קצת אחרת, להשתמש בדאטה בצורה קצת אחרת.
כאן אין לי דאטה שאני שולח, אז אני משאיר את השאילתא as is. אבל כאן, מה שאני עושה, אפילו שזה מספרים, דרך אגב, גם אם זה מספרים עושים את זה, במקום הדאטה עצמו כל מה שאני עושה אני שם סימן שאלה אז הנה יש לנו פה סימן שאלה ואז לפונקציה אסינק אקסקיוט אסינק אני שולח את השאילתה שיש
לה סימני שאלה ואת המערך עם הווליוז במקום לשרשר את ה-id לזה אז אנחנו פשוט מכניסים אותו למערך הזה ואת זה אנחנו רוצים לעשות בכל מקום דרך אגב עכשיו לא לא צריך את ה-String Interpolation במקרה הזה, אפשר להשתמש במכרוזת רגילה, לא שזה כזה משנה עכשיו.
בואו נעשה את זה כאן. פה אנחנו כמובן לא עושים את השרשור הזה, את ה-Escape בעצמנו, אז ניפטר מזה ונחזיר product.name לפה. נחליף את השאילתה למכרוזת רגילה בשביל שיהיה פה אחיד, ובמקום כל הדבר הזה אנחנו שמים סימני שאלה.
אבל, הנה האבל שיש פה, שימו לב, בגלל שהמערכת עושה לנו אסקייפט, אז היא שמה לנו אוטומטית את שני החבר'ה האלה. זאת אומרת שאנחנו אפילו לא צריכים לעטוף בגרש גרש את הערכים שהן מכרוזות. זאת אומרת שהמערכת האוטומטית גם עוטפת לנו הכל בגרש
גרש וגם כל גרש טקסטואלי עושה לו אסקייפט קראטר ושמה בקסטלש לפניו. אז זה עוד דבר שהמנגנון האוטומטי הזה עושה. כאן מובן שפה אנחנו חייבים לתת את הערכים לפי הסדר.
הערך הראשון הוא product.name הולך להיכנס לפה כי הוא הראשון, פסיק product.price שני product.stock שלישי בואו נלך ל-update. נמחק את זה ונגיד לו במקום כל הסיפור הזה תן לי סימן שאלה במקום כל הסיפור הזה תן לי סימן שאלה תן לי סימן שאלה ובסוף סימן שאלה אין לי צורך בסטרינג אינטרפוליישן ותן לי את כל ה-values במערך לפי הסדר.
אלה שלושת ה-values הראשונים וזה ה-value הבא בתור. ID הוא האחרון. Good. מה אנחנו רוצים לעשות ב-update partial?
ב-update partial אנחנו רוצים לעשות משהו קצת אחר. בגלל שאנחנו לא תמיד יודעים כמה ערכים היוזר הכניס, בואו נעשה את הדבר הבא:
נייצר מערך values, ואז פשוט נבוא ונגיד כזה דבר: אם יש לנו product.name, אז נגיד לו שאנחנו רוצים סימן שאלה. סימן שאלה ואז product name שווה סימן שאלה.
בנוסף אנחנו רוצים לגשת לvalues ולהוסיף את product.name אותו הדבר בואו נעשה כאן. הנה יש לנו unit price הנה הסימן שאלה שלו פה מאיזושהי סיבה חסר לי נקודה פסיק גם כאן וזה אומר שחסר לי גם פה נקודות פסיק.
לא שזה עושה משהו לג'אווה סקריפט אבל למען האחידות. ואנחנו רוצים לגשת ל-values ולהגיד שגם product.price שייך למשחק.