100%
כל המאמרים ←

PHP, HTML ו־SQL: מ־MySQL ל־MariaDB

כך משתלבים דף אינטרנט, קוד שרת ומסד נתונים — עם היסטוריה, תוכנה חופשית ותכנון בטוח יותר.

English
חלון HTML, עיבוד PHP ומסד SQL, עם כלב ים מסוגנן המזכיר את MariaDB וטאקס.
איור וקטורי מקורי; שמות הפרויקטים מציינים את נושא המאמר ואינם מעידים על חסות.

שלוש שכבות, שלושה תפקידים

אתר דינמי נעשה ברור יותר כשמפרידים בין המבנה שמקבל הדפדפן, התוכנה שפועלת בשרת והמידע שנשמר במסד. 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.