שלח תשובה

זירת השאלות

667
צפיות
16
תשובות

איך עושים משפט SQL ש…

,‏ 9 בנובמבר, 2004

למשל, יש לי שדה בשם A. ברשומה מסויימת הערך שלו הוא "abcdef".
אני רוצה משפט SQL שאני לדוגמא אתן לו את הערך "abc" והוא יבדוק אם בשדה A קיים הערך הזה, אבל שיבדוק אם הוא קיים בתוך השדה, ולא אם השדה=לערך.

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

תודה לעוזרים.

תגיות:

16 תשובות

  1. ניר טייב הגיב:

    חפש על LIKE ב-manual של Mysql
    באקסס למשל זה נעשה כך:

    SELECT …
    FROM …
    WHERE <fld> Like "*A*"

  2. Night הגיב:

    לא מצאתי כלום על LIKE
    כאן זה לא מופיע בכלל..

  3. Night הגיב:

    אופס הינה ההודעה:
    יש משהו יותר יעיל מאשר:

    SELECT Name FROM bla WHERE SUBSTRING(Name,1,1)<>"a" AND SUBSTRING(Name,1,1)<>"b" AND ………… SUBSTRING(Name,1,1)<>"z"

    אני רוצה לבדוק את התו הראשון שבשדה Name, ולשלוף רק איפה שהתו הראשון בשדה הזה, לא מתחיל באחת מאותיות הABC..
    יש משהו יותר יעיל מאשר מה שכתבתי למעלה?
    (MySQL)

    תודה

  4. זהר פלד הגיב:

    אם יש תמיכה ב NOT LIKE,
    או בתבניות (כמו באקסס) אז כן.
    אפפעם לא יצא לי לעבוד עם מסד הנתונים הזה ולכן אני לא יכול לומר לך בודאות, אבל אם לא תקבל תשובה ממישהו אחר אתה מוזמן לשאול גם בפורום בסיסי נתונים בתפוז, יש שם לא מעט מומחים לנושא.

  5. Night הגיב:

    איזה תווים אני צריך להחליף?
    אני מקבל מידע שנשלח דרך טופס, המידע נכנס לבסיס נתונים.
    אני מחליף את התווים " , > <
    איזה עוד תווים יכולים לגרום לבעיות?
    עוד משהו, אני יודע שגם את התו # צריך לסנן, כי הוא נחשב כהערה בSQL. אך כאן אין לו מחליף. יש למישהו רעיון בשבילי?
    חשבתי על להחליף את # בקוד מסויים אבל זה יגרום לי להחליף את אותו קוד ב# בעמודי הצגת הנתונים, שזה קצת מסבך את העיניינים. יש עוד בעיה, יכול להיות שהקוד שאני יחליט להחליף את # בו, יהיה חלק טבעי מהטקסט שכתב המשתמש. הכוונה יכול להיות שאת הקוד הזה רצה המשתמש לכתוב ואני יציג אותו כ# בגלל ההגנה..

    אני מקווה שאני מובן.

    תודה רבה לעוזרים

  6. אוריקס הגיב:

    מאמר בנושא XSS
    http://www.microsoft.com/israel/security/developers/CrossSiteScripting.asp

    ויש גם ב FAQ.

    כדי להתגונן מפני SQL Injection, תוכל למצוא מאמר כאן. למרות שמשתמשים ב Command, עדיין מומלץ להחליף תווים בעיתיים.

  7. Night הגיב:

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

    במה אני יכול להחליף את התווים האלה?

  8. ניר טייב הגיב:

    אתה צריך להחליף את הקלט של המשתמש
    למה שלא ייצור בעיות אצלך!

    אם המשתמש מכניס תווי יוניקוד/אסקיי אז אם אתה מחליף את התווים & ו-#
    אז הקלט של המשתמש (תווי האסקיי והיוניקוד) יוראו למשתמש בחזרה ולא הפלט שלהם.

    מובן ?

  9. Night הגיב:

    כן אבל…
    בהודעה הקודמת שלי כתבתי:
    "יש להחליף את הסימנים # ואת הסימן & על ידי # והסימן & בהתאמה."
    זה לא יצא טוב. זה התיקון:
    יש להחליף את הסימנים # ואת הסימן & על ידי &##35; והסימן &##38; בהתאמה.

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

    אז נגיד קיבלתי סטרינג מהמשתמש: "#&*". אני מחליף את התווים & ו-# ומקבל את המחרוזת: "&##35;&##38;*" (שוב, צריך להיות # אחד ולא שניים ברצף).
    עד כאן הכל סבבה, חסמתי את התווים האלה אבל למשתמש זה יוצג כרגיל.

    הבעיה היא, שאני מכניס את המחרוזות "&##35;&##38;*" למסד, ככה:

    insert into tbl(str) values('" & str & "')"

    כאשר str הוא המחרוזת "&##35;&##38;*" , זה בעצם ייצא ככה:

    insert into tbl(str) values('&##35;&##38;*')"

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

    תודה לעוזרים

  10. Night הגיב:

    מישהו יכול להקפיץ לי בבקשה?
    תודה

  11. זהר פלד הגיב:

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

  12. זהר פלד הגיב:

    למה שלא תשתמש ב escape sequence של
    התווים האלו,
    או שתייצר לך איזה שהוא escape sequence מיוחד שלך לתווים בעיתיים.
    אתה צריך להבין שמה שחשוב זה שתבצע ההמרה, ואם זה יקח עוד המרה אח"כ, אז העמסת עוד מיקרו שניה על השרת. אז מה?

שלח תשובה