מבוא ל-MySQL/PHP

שעה ותאריך ב-PHP

MySQL הוא אחד הרלציונים הפופולריים והנפוצים בעולם מאגרי מידע. זהו כלי חזק לאחסון וארגון כמויות גדולות של נתונים בצורה שיטתית ויעילה. PHP היא שפת תכנות בצד השרת לאינטראקציה עם מסדי נתונים של MySQL ויצירת יישומי אינטרנט דינמיים. MySQL ו-PHP 8 עובדים היטב יחד לִיצוֹר פלטפורמת פיתוח אתרים חזקה. במבוא זה ל-MySQL/PHP, נעבור על היסודות של התחברות למסד נתונים של MySQL עם PHP 8, ביצוע פעילויות CRUD (יצירה, קריאה, עדכון ומחיקה), והבטחתך קוד בטוח ומאובטח.

הקמת סביבת פיתוח עבור MySQL

הגדרת פיתוח MySQL/PHP8 סביבה עשוי להיראות קשה בהתחלה, אבל עם הכלים הנכונים וקצת עזרה, זה יכול להיות תהליך פשוט. בחלק זה נעבור על התהליכים הנדרשים להגדרתך מקומי סביבת פיתוח.

ראשית, עליך להתקין את היישומים הנדרשים. שרת אינטרנט, כגון Apache או Nginx, PHP8 ו-MySQL כלולים כולם. ניתן להתקין רכיבים אלו במגוון שיטות, בהתאם למערכת ההפעלה שלך. ב-Windows, למשל, אתה יכול להשתמש בחבילות התוכנה WAMP או XAMPP, המגיעות מותקנות מראש עם Apache, PHP ו-MySQL. כדי להתקין את היישומים הנדרשים בלינוקס, השתמש במנהלי חבילות כגון apt או yum.

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

התחברות למסד נתונים של MySQL

הצעד הראשון בשימוש ב-PHP כדי להתמודד עם מסד נתונים של MySQL הוא להתחבר אליו. ניתן להשיג זאת על ידי שימוש בהרחבות MySQLi או PDO (PHP Data Objects). שני ההרחבות מציעות יכולות דומות, אולם PDO הוא תכליתי יותר ויכול להתחבר למאגרי מידע שונים, בעוד MySQLi מוגבל ל-MySQL.

הנה דוגמה כיצד להתחבר למסד נתונים של MySQL באמצעות MySQLi עם תחביר בסגנון פרוצדורלי:

<?php
/* Connection parameters */
$host = 'localhost';
$user = 'root';
$password = 'password';
$dbname = 'test';
/* Connect to the database */
$mysqli = mysqli_connect($host, $user, $password, $dbname);
/* Check for errors */
if (mysqli_connect_errno())
{
   echo 'Connection failed: ' . mysqli_connect_error();
   die();
}

והנה דוגמה כיצד להתחבר למסד נתונים של MySQL באמצעות PDO:

<?php
/* Connection parameters */
$host = 'mysql:host=localhost;dbname=test';
$user = 'root';
$password = 'password';
/* Connect to the database */
$pdo = new PDO($host, $user, $password);

ביצוע פעולות CRUD

לאחר שיצרת חיבור למסד נתונים של MySQL, תוכל לבצע פעולות CRUD. CRUD מייצג יצירה, קריאה, עדכן ומחק, ומייצג את ארבע הפעולות הבסיסיות שאתה יכול לבצע במסד נתונים.

יוצרים

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

<?php
/* Include the connection script */
include 'db_inc.php';
/* Values */
$product_name = 'toothpaste';
$product_price = 5;
/* Build the query */
$query = "INSERT INTO products (name, price) VALUES ('" . mysqli_real_escape_string($mysqli, $product_name) . "', " . mysqli_real_escape_string($mysqli, $product_price)  . ")";
/* Execute the SQL query */
if (!mysqli_query($mysqli, $query))
{
   /* if mysqli_query() returns FALSE it means an error occurred */
   echo 'Query error: ' . mysqli_error($mysqli);
   die();
}
echo "Product added successfully<br>";

קריאה

פעם אחת נתונים נמצא בטבלה, יש לקרוא אותה כדי להראות למשתמש. משפט SELECT SQL משמש לקריאת שורות מטבלה. התחביר של פקודה זו הוא כדלקמן:

SELECT column1, column2, column3 FROM table_name;

השתמש בשאילתה הבאה כדי לקרוא את כל הערכים ממסד נתונים של "מוצרים", לדוגמה:

SELECT * FROM products;

כדי לבצע זאת שאלה ו לולאה על תוצאה מוגדר עם PHP, השתמש ב- MySQLi או ספריות PDO. לדוגמה, שימוש ב-MySQLi עם התחביר הפרוצדורלי:

<?php
/* Include the MySQLi (procedural-style) connection script */
include 'db_inc.php';
/* Query */
$query = 'SELECT * FROM products';
/* Execute the query */
$result = mysqli_query($mysqli, $query);
/* Check for errors */
if (!$result)
{
   echo 'Query error: ' . mysqli_error($mysqli);
   die();
}
/* Iterate through the result set */
while ($row = mysqli_fetch_assoc($result))
{
   echo 'Product name: ' . $row['name'] . ', price: '

עדכון

פעולת העדכון משנה נתונים קיימים בטבלה. להלן התחביר הבסיסי לפעולת העדכון:

UPDATE table_name SET column1 = new_value1, column2 = new_value2, ... WHERE some_column = some_value;

לדוגמה, נניח שיש לנו טבלת מוצרים עם הנתונים הבאים:

IDשםמחיר
1משחת שיניים5
2הנעלה50
3מחשב נייד1000

ואנחנו רוצים לעדכן את מחיר משחת השיניים מ-$5 ל-$4.50.

אל האני שאלה עבור פעולה זו תהיה:

UPDATE products SET price = 4.50 WHERE name = 'Toothpaste';

יש לציין שסעיף WHERE משמש לציון שורה או שורות שיש לעדכן. אם משפט WHERE מושמט, כל השורות בטבלה משתנות.

עבור הדוגמה שלעיל, אנו יכולים להשתמש בקוד ה-PHP הבא:

<?php
/* Include the connection script */
include 'db_inc.php';
/* Values */
$product_name = 'Toothpaste';
$product_price = 4.50;
/* Build the query */
$query = "UPDATE products SET price = " . $product_price . " WHERE name = '" . $product_name . "'";
/* Execute the SQL query */
if (!mysqli_query($mysqli, $query))
{
   /* if mysqli_query() returns FALSE it means an error occurred */
   echo 'Query error: ' . mysqli_error($mysqli);
   die();
}
echo "Product updated successfully<br>";

מחיק

כדי למחוק נתונים קיימים מא שולחן, להשתמש ב מחק פעולה. לפעולת המחיקה יש את התחביר הבסיסי הבא: בחר עמודה כלשהי מתוך שם הטבלה WHERE ערך כלשהו = ערך כלשהו; נניח שיש לנו טבלת מוצרים עם המידע הבא:

| תעודת זהות | שם | מחיר |
|—-|———–|——-|
| 1 | משחת שיניים| 5 |
| 2 | נעליים | 50|
| 3 | מחשב נייד | 1000 |

ואנחנו רוצים למחוק את משחת השיניים מהשולחן. השאילתה עבור פעולה זו תהיה:

DELETE FROM products WHERE name = 'Toothpaste'; 

יש לשים לב שסעיף WHERE משמש להגדרת השורה או השורות למחיקה. אם משפט WHERE מושמט, כל השורות בטבלה יוסרו.
עבור הדוגמה שלעיל, אנו עשויים להשתמש בקוד PHP:

<?php
/* Include the connection script */
include 'db_inc.php';
/* Values */
$product_name = 'Toothpaste';
/* Build the query */
$query = "DELETE FROM products WHERE name = '" . $product_name . "'";
/* Execute the SQL query */
if (!mysqli_query($mysqli, $query))
{
   /* if mysqli_query() returns FALSE it means an error
}
echo "Product deleted successfully<br>";

מניעת הזרקת SQL

מניעת הזרקת SQL היא חלק חיוני בעבודה עם MySQL ו-PHP. התקפות הזרקת SQL הן סיכון אבטחת אינטרנט גדול ויכול לגרום נזק חמור למסד הנתונים שלך אם לא מטופל כראוי. בחלק זה, נסקור את היסודות של מניעת התקפות הזרקת SQL באמצעות שימוש בטוח טכניקות בניית שאילתות כגון הצהרות מוכנות והימלטות המשתמש קֶלֶט.

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

לדוגמה, שקול את הקוד הבא:

$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($mysqli, $query);

השאילתה בדוגמה זו נוצרת תוך שימוש בנתונים מהמשתנים $username ו-$password. תוקף עלול להכניס קוד SQL זדוני לשאילתה אם הוא הזין נתונים שגויים למשתנים אלה.

כדי למנוע סוג זה של התקפה, השתמש במשפטים מוכנים כמו זה:

$query = "SELECT * FROM users WHERE username = ? AND password = ?";
$stmt = mysqli_prepare($mysqli, $query);
mysqli_stmt_bind_param($stmt, "ss", $username, $password);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

בדוגמה זו, השאילתה בנויה עם מצייני מיקום (?) במקום נתונים. לאחר מכן הנתונים ניתנים בנפרד לשאילתה באמצעות הפונקציה mysqli_stmt::bind_param. מכיוון שהלוגיקה והנתונים מופרדים, קשה הרבה יותר לתוקף להכניס קוד SQL זדוני לשאילתה.

בריחה קלט משתמש היא שיטה נוספת להימנעות מהתקפות הזרקת SQL. בריחה היא תהליך של עיבוד משתנה על ידי בריחה של כל התווים העלולים להזיק (כגון ' ו%) שעלולים לגרום לבעיות SQL או התקפות הזרקה.

שקול את הקוד הבא כדוגמה:

$username = $_REQUEST['username'];
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($mysqli, $query);

בדוגמה זו, $username המשתנה נמצא בשימוש בשאילתה ללא כל הגנה. כדי למנוע התקפות הזרקת SQL, אתה יכול להשתמש ב- mysqli_real_escape_string לתפקד באופן הבא:

$username = mysqli_real_escape_string($mysqli, $_REQUEST['username']);
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($mysqli, $query);

בדוגמה זו, mysqli_real_escape_string הפונקציה משמשת כדי להימלט מה- $username משתנה לפני השימוש בו בשאילתה. זה מקשה הרבה יותר על תוקף להחדיר קוד SQL זדוני לשאילתה.

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

תכונות MySQL מתקדמות

MySQL היא מערכת ניהול מסדי נתונים יחסיים חזקה ועשירה בתכונות, וייתכן שתרצה להשתמש בכמה מהיכולות המתקדמות שלה ככל שתהיה יותר נוח איתה. עם החלק הזה, נסתכל על כמה מהיכולות המורכבות יותר של MySQL, כגון פרוצדורות מאוחסנות, טריגרים ותצוגות, וכיצד להשתמש בהן ב-PHP8.

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

ניתן להשתמש בהצהרת Construct PROCEDURE ב-MySQL ליצירת פרוצדורה מאוחסנת. לדוגמה, הפרוצדורה המאוחסנת הבאה מקבלת מזהה עובד כטיעון ומחזירה את שמו ומשכורתו של העובד:

DELIMITER $$
CREATE PROCEDURE get_employee_info (IN emp_id INT)
BEGIN
    SELECT name, salary FROM employees WHERE id = emp_id;
END$$
DELIMITER ;

אתה יכול לקרוא להליך מאוחסן ב-PHP8 באמצעות שיטת PDO::prepare() ולאחר מכן שיטת PDOStatement::execute() . לדוגמה:

$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'root', 'password');
$stmt = $pdo->prepare('CALL get_employee_info(:emp_id)');
$stmt->execute(array(':emp_id' => 42));
$row = $stmt->fetch();

מפעיל:
טריגרים הם קבוצה של הוראות המופעלות אוטומטית בתגובה לאירוע מסוים, כגון משפט INSERT, UPDATE או DELETE. ניתן להשתמש בטריגרים כדי לאכוף מגבלות, שינויים בביקורת או עדכונים או הסרות מדורגים.

ניתן להשתמש בפקודה Generate TRIGGER ב-MySQL ליצירת טריגר. לדוגמה, כאשר רשומה מתעדכנת, הטריגר הבא משנה את הטבלה ששונתה בעמודה:

CREATE TRIGGER update_modified_at
    BEFORE UPDATE ON mytable
    FOR EACH ROW
    SET NEW.modified_at = NOW();

צפיות:

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

ניתן להשתמש בהצהרת Build VIEW ב-MySQL ליצירת תצוגה. לדוגמה, התצוגה הבאה מציגה רק את השם והשכר של עובדים שמרוויחים יותר מ-$50,000:

CREATE VIEW high_salary_employees AS
    SELECT name, salary FROM employees WHERE salary > 50000;

אתה יכול לבצע שאילתה על תצוגה באותו האופן שבו תבצע שאילתה לטבלה, על ידי שימוש בשיטות PDO::query() או PDO::prepare(). לדוגמא:

$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'root', 'password');
$stmt = $pdo->query('SELECT * FROM high_salary_employees');

בחלק זה ראינו כמה מהתכונות המתקדמות של MySQL וכיצד להשתמש בהן ב-PHP8.

שיטות עבודה מומלצות

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

Debugging: כאשר עובדים עם MySQL/PHP8, זה קריטי ללמוד כיצד לנפות באגים בקוד שלך. ניתן להשיג זאת על ידי שימוש בכלים כמו PHP Debug Bar או Xdebug, כמו גם ללמוד כיצד לקרוא ולהבין הודעות שגיאה.

אופטימיזציה של ביצועים: אחד החלקים הקריטיים ביותר בעבודה עם MySQL/PHP8 הוא לוודא שהקוד שלך מתפקד. ניתן להשיג זאת באמצעות שימוש במטמון, יצירת אינדקס ועיצוב טוב של מסד נתונים, כמו גם למידה כיצד לייעל את השאילתות שלך באמצעות הפקודה MySQL EXPLAIN.

אבטחה: כשאתה עובד עם MySQL/PHP8, זכור תמיד את האבטחה. כדי למנוע מתקפות הזרקת SQL, השתמש בהצהרות מוכנות והימנע מקלט משתמש. למידע רגיש, השתמש בהצפנה.

שימוש ב-PDO: השתמש ב-PDO (PHP Data Objects) כממשק לאינטראקציה עם מסדי הנתונים שלך כדי להגביר את האבטחה ולעודד שיטות עבודה מומלצות. PDO מספק הצהרות מוכנות, מה שהופך אותו לבטוח הרבה יותר משגרות mysql_*.

שימוש ב-ORM: ORM היא טכנולוגיה המאפשרת לך להתממשק עם מסד הנתונים שלך באמצעות תחביר מונחה עצמים. במקום לכתוב שאילתות SQL, אתה יכול לבצע פעילויות CRUD במסד הנתונים שלך באמצעות מסגרת ORM כגון Doctrine או Eloquent.

MySQL שלך יהיה ניתן לניהול, ביצועים ובטוח על ידי ביצוע שיטות עבודה מומלצות אלה.

שאלות ותשובות

ש: מהי שגיאת האבטחה הנפוצה ביותר בעת שימוש ב-MySQL/PHP8?
ת: בעבודה עם MySQL/PHP8, הבעיה הנפוצה ביותר הקשורה לאבטחה היא שימוש במשתנים לא בטוחים בתוך שאילתות SQL מבלי לברוח מהם או להשתמש במשפטים מוכנים. זה יכול להוביל להתקפות הזרקת SQL, המדורגות כסיכון האבטחה המקוון מספר אחת על ידי OWASP.

ש: מהן הצהרות מוכנות, ולמה הן חשובות ב-MySQL/PHP8?
ת: הצהרות מוכנות הן שיטה ליצירת שאילתות SQL שהן בטוחות ויעילות כאחד. הם מאפשרים לך לבודד את לוגיקה של שאילתת SQL מהנתונים ולחמוק אוטומטית מכל קלט משתמש. זה הופך אותם לבטוחים הרבה יותר מאשר בריחה ידנית של קלט משתמש ויכול לסייע במניעת התקפות הזרקת SQL.

ש: כיצד אוכל להגדיר סביבת פיתוח מקומית של MySQL/PHP8?
ת: ישנם כמה שלבים המעורבים בהקמת סביבת פיתוח מקומית עבור MySQL/PHP8. כדי להתחיל, עליך להתקין את התוכנה הנדרשת, הכוללת שרת אינטרנט (כגון Apache או Nginx), PHP8 ו-MySQL. השלב הבא הוא לבנות מסד נתונים חדש ולהגדיר את סביבת PHP8 כדי להתחבר אליו. זה נעשה בדרך כלל על ידי שינוי קובץ תצורה של PHP והוספת מידע החיבור הרלוונטי למסד הנתונים.

ש: מהן כמה שיטות מומלצות לשימוש ב-MySQL ו-PHP8?
ת: שימוש בהצהרות מוכנות או בריחה מקלט משתמש כדי למנוע איומי הזרקת SQL, מבנה הקוד שלך לתחזוקה וניפוי באגים ואופטימיזציה של הקוד שלך לביצועים הם כמה שיטות עבודה מומלצות בעת התמודדות עם MySQL/PHP8. זה גם קריטי לשמור על עדכניות התוכנה והתלות שלך כדי להפחית את איומי האבטחה ולהבטיח תאימות.

ש: מהן כמה יכולות MySQL מתוחכמות, וכיצד ניתן להשתמש בהן עם PHP8?
ת: התכונות המתקדמות של MySQL כוללות נהלים מאוחסנים, טריגרים ותצוגות. פרוצדורות מאוחסנות הן הצהרות SQL שהורכבו מראש ועשויות להתבצע מספר רב של פעמים, טריגרים הם סקריפטים הפועלים אוטומטית כאשר אירועים ספציפיים מתרחשים במסד נתונים, ותצוגות הן טבלאות וירטואליות שניתן להשתמש בהן כדי לפשט חיפושים מורכבים. פונקציות אלו זמינות ב-PHP8 על ידי הכללתן בשאילתות SQL ועיבוד התוצאות כראוי.

תרגילים:

  1. איך מתחברים למסד נתונים של MySQL באמצעות PHP8?
  2. איך מבצעים משפט SELECT ב-PHP8 כדי לקרוא נתונים מטבלת MySQL?
  3. איך מבצעים משפט INSERT ב-PHP8 כדי להוסיף נתונים לטבלת MySQL?
  4. איך מבצעים משפט UPDATE ב-PHP8 כדי לעדכן נתונים בטבלת MySQL?
  5. איך מבצעים משפט DELETE ב-PHP8 כדי למחוק נתונים מטבלת MySQL?
  6. כיצד מונעים התקפות הזרקת SQL בעת שימוש ב-PHP8 לאינטראקציה עם מסד נתונים MySQL?

תשובות:

  1. כדי להתחבר למסד נתונים של MySQL באמצעות PHP8, אתה יכול להשתמש ב- mysqli_connect() פונקציה או PDO מעמד. שתי השיטות דורשות ממך לספק פרטי חיבור כגון שם המארח, שם המשתמש, הסיסמה ושם מסד הנתונים.
  2. כדי לבצע משפט SELECT ב-PHP8 כדי לקרוא נתונים מטבלת MySQL, אתה יכול להשתמש ב- mysqli_query() פונקציה או PDO::query() שיטה. לאחר מכן תוכל להשתמש בפונקציות כגון mysqli_fetch_assoc() or PDO::fetch() לחזור על השורות המוחזרות.
  3. כדי לבצע משפט INSERT ב-PHP8 כדי להוסיף נתונים לטבלת MySQL, אתה יכול להשתמש ב- mysqli_query() פונקציה או PDO::query() שיטה. זכור להשתמש בהצהרות מוכנות או בריחה כדי להבטיח שקלט המשתמש בטוח לשימוש בשאילתה.
  4. כדי לבצע משפט UPDATE ב-PHP8 כדי לעדכן נתונים בטבלת MySQL, אתה יכול להשתמש ב- mysqli_query() פונקציה או PDO::query() שיטה. זכור להשתמש בהצהרות מוכנות או בריחה כדי להבטיח שקלט המשתמש בטוח לשימוש בשאילתה.
  5. כדי לבצע משפט DELETE ב-PHP8 כדי למחוק נתונים מטבלת MySQL, אתה יכול להשתמש ב- mysqli_query() פונקציה או PDO::query() שיטה. זכור להשתמש בהצהרות מוכנות או בריחה כדי להבטיח שקלט המשתמש בטוח לשימוש בשאילתה.
  6. כדי למנוע התקפות של הזרקת SQL בעת שימוש ב-PHP8 לאינטראקציה עם מסד נתונים של MySQL, עליך להשתמש בהצהרות מוכנות או ב-Escape כדי להבטיח שקלט המשתמש בטוח לשימוש בשאילתות. ניתן לעשות זאת באמצעות פונקציות כגון mysqli_real_escape_string() או PDO::quote() שיטת בריחה או שימוש ב- mysqli_prepare() פונקציה או PDO::prepare() שיטה להצהרות מוכנות.

למקרה שתרצה לגלות עוד על MySQL לאחר ההיכרות הזו עם MySQL/PHP, אנו ממליצים על הדברים הבאים התייחסות רשמית.

שעה ותאריך ב-PHP
en English
X
גלול למעלה