PHP, HTML ו־SQL: מ־MySQL ל־MariaDB
כך משתלבים דף אינטרנט, קוד שרת ומסד נתונים — עם היסטוריה, תוכנה חופשית ותכנון בטוח יותר.
Englishשלוש שכבות, שלושה תפקידים
אתר דינמי נעשה ברור יותר כשמפרידים בין המבנה שמקבל הדפדפן, התוכנה שפועלת בשרת והמידע שנשמר במסד. HTML מתאר מסמך: כותרות, פסקאות, קישורים וטפסים. PHP מפעיל את הלוגיקה בצד השרת. SQL היא שפת שאילתות ושינויים בנתונים, שמנוע כמו MariaDB או MySQL מבצע. הדפדפן צריך לקבל את תוצאת העבודה, ולא את סיסמת המסד או את קוד ה־PHP.
נניח שמבקר פותח רשימת מאמרים. קוד השרת בודק את הבקשה, שולף רק רשומות שפורסמו ובונה HTML. CSS קובע את העיצוב; JavaScript יכול להוסיף התנהגות נקודתית. אין הכרח להפוך קריאת מאמר לפעולה שתלויה בהרצת תכנית גדולה בדפדפן. ההפרדה הזאת מקלה גם על בדיקות ועל איתור תקלות.
| טכנולוגיה | מקום הפעולה | תפקיד |
|---|---|---|
| HTML | דפדפן | מבנה המסמך ומשמעותו |
| PHP | שרת | לוגיקת היישום ויצירת הפלט |
| SQL | מסד נתונים | שאילתות ושינויים בנתונים |
| MariaDB / MySQL | שרת מסד | אחסון הנתונים וביצוע SQL |
מהכלים הראשונים של PHP לשירות מסודר
הכלים של רסמוס לרדורף פורסמו ב־1995, ו־PHP 3 הופיע ב־1998. השפה צמחה מתוך צורכי פיתוח מעשיים. כיום אין סיבה לשחזר שיטות אירוח מיושנות: חשוב להשתמש בסביבת ריצה נתמכת, להבין את התלויות ולתעד את התצורה. בשרת Linux אפשר להגדיר מאגר תהליכי PHP-FPM נפרד לאתר, עם הרשאות מתאימות.
הגישה שאנחנו ממליצים עליה היא לראות גם בלוג קטן שירות שצריך לדעת לשחזר. תבניות פשוטות, סודות מחוץ לקבצים הציבוריים ותיעוד התקנה חוסכים עבודה בהמשך. בחירת טכנולוגיה מוכרת יכולה להיות טובה כאשר היא מתאימה לצוות ולצורכי המשתמשים; אין צורך להחליף הכול בגלל אופנה.
MariaDB נולדה מ־MySQL, אך MySQL לא נעלמה
MariaDB החלה כפיצול של MySQL ומפותחת בהשתתפות אנשים מצוות MySQL המקורי. MariaDB Server מופצת ברישיון GPLv2. עם זאת, אין מדובר בשם החדש של כל התקנת MySQL: שני הפרויקטים ממשיכים להתקיים בנפרד. ההיסטוריה המשותפת מסבירה דמיון רב בממשקים, אבל אינה מבטיחה שכל התנהגות זהה בכל גרסה.
לפני מעבר בודקים מנועי אחסון, קידודים, השוואת מחרוזות, אימות משתמשים ומצבי SQL. משחזרים עותק בדיקה ומריצים עליו את היישום. אין להניח שהעתקת קובצי נתונים בין שני המוצרים היא דרך הסבה תקינה. חזרה לאחור היא חלק מהתכנון, ולא החלטה שמאלתרים אחרי תקלה.
SQL אינה שם של מוצר
טבלאות מאפשרות לייצג מאמרים, מחברים והרשאות ולקשור ביניהם. שאילתה מתארת אילו נתונים נדרשים, והמנוע בוחר כיצד להשיג אותם. כדי לתכנן נכון צריך להבין את הבקשות שהאתר מבצע ואת גודל המידע הצפוי. אינדקס מתאים וסוגי נתונים מדויקים חשובים יותר מהכרזה כללית שמסד מסוים תמיד מהיר יותר.
להפריד נתונים מהוראות
יש להשתמש בשאילתות מוכנות ובפרמטרים עבור ערכים. שם עמודת מיון, לעומת זאת, צריך להגיע מרשימת אפשרויות מאושרת: פרמטר אינו תחליף לשם של רכיב SQL. משתמש המסד של האתר צריך לקבל רק את ההרשאות שנחוצות לו. גם מידע שהגיע מהמסד דורש טיפול מתאים לפני שמציגים אותו ב־HTML.
$stmt = $pdo->prepare(
'SELECT title FROM articles WHERE id = :id AND published = 1'
);
$stmt->execute(['id' => $validatedId]);
$title = $stmt->fetchColumn();
if ($title !== false) {
echo htmlspecialchars($title, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}הקטע מניח חיבור PDO קיים ומזהה מספרי שנבדק מראש. זו המחשה להפרדת פרמטרי SQL מקידוד פלט HTML, ולא יישום שלם.
חופש תוכנה ותחזוקה הולכים יחד
קוד זמין ורישיון מתאים מאפשרים ביקורת ותחזוקה עצמאית. עדיין צריך לעדכן תוכנה, להגן על סודות ולתרגל שחזור. סיסמאות שומרים כגיבוב באמצעות ממשק מתאים, ולא כטקסט גלוי. שגיאות מפורטות נרשמות ביומן פנימי. לבחינה של גישה נוספת למסדי נתונים קראו את המאמר על PostgreSQL.