מסדי נתונים / בחירת מסד הנתונים האידיאלי / Escape Sequences ומסד הנתונים שלך
Escape Sequences ומסד הנתונים שלך
ביום השלישי השתעשעתי עם מספר תקליטים, אחד מהם נקרא
"We Can't Dance" זהו שם שבחיים לא יוכל להיכנס כמחרוזת לתוך מסד נתונים דרך MySQL,מכיוון שMySQL משתמש בסימן ' כסמן למחרוזת!.
המגבלה המעיקה שבה רק עתה נתקלנו ניתנת לפתרון מהיר ע"י הוספת הסימן / לפני ה - ' :
mysql> insert into albums(title,artist,released)
-> values('We Can\'t Dance','Genesis','1991-01-01');
בכל מקרה, יהיה קצת יותר קשה לבצע את הפעולה הזאת עם תוכן שנשלף מהאינטרנט.
לעיתים קרובות, הנתונים שתרצה להכניס למסד הנתונים ישלפו ישירות מתוך פרמטר טופס.
קוד הePerl שיעזור לך יראה ככה:
$foo = $query->param('foo');
$foo =~ s/'/\\'/g; # this Perl command will substitute ' with \'
$SQL = <<"EOT";
insert into my_table(my_column)
values ('$foo')
EOT
זה רעיון רע מאוד לקוד מכמה סיבות:
נכון שMySQL משתמש בקו אלכסוני הפוך כדי לדלג מעל הסימנים השונים, אבל זה לא אומר שכל מסד נתונים משתמש באותה שיטה בדיוק. הכללת הקו האלכסוני ההפוך כחלק מהקוד תגביל את הגמישות של התוכנית.
בעיה אחרת עם הקוד היא שהוא מטפל רק ב - ' ולא בסימנים אחרים שגם הם צריכים טיפול זהה.
איזה סימנים? זה משתנה ממסד נתונים אחד למשנהו.
אל תנסו אפילו לחפש את הסימנים האלו בקבצי העזרה או לשנן את כולם. אתם סתם תבזבזו את זמנכם בהתמודדות עם המון טעויות אנוש מרגיזות.
תנו ל $dbh->quote לעשות את העבודה בשבילכם, בגלל שהוא יעשה זאת בדרך הנכונה, בכל פעם, בכל מסד נתונים.
$foo = $dbh->quote($query->param('foo'));
$query->param('foo') יחזיר את ערך הטקסט שהוכנס לfoo, ו $dbh->quote
יטפל בערכים הבעייתים, בהתאמה לסוג מסד הנתונים שבו אתם עובדים.
עוד דבר ש $dbh->quote מספק הוא מירכאות במקומות המתאימים, כך שנחסך לכם זמן ההקלדה שלהן.
עמוד הבא: הטבעת ביטויים יחסיים במחרוזת Here-Document >>
|