תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

MySQLi - כתיבה, קריאה, עדכון, מחיקה באמצעות PHP

מחבר:
בתאריך:

מדריך זה כולל את קוד ה-PHP וה-MySQLi הדרוש להתקשרות ולביצוע הפעולות הנפוצות ביותר עם מסד הנתונים באתר.  

יצירת קבועים להתקשרות עם בסיס הנתונים

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

לדוגמה:

<?php
//קבועים להתקשרות עם בסיס הנתונים
defined('DB_HOST')? null : define('DB_HOST', 'localhost');
defined('DB_USER')? null : define('DB_USER', 'root');
defined('DB_PASS')? null : define('DB_PASS', '');
defined('DB_NAME')? null : define('DB_NAME', 'sandbox_db');

 

יצירת התקשרות עם בסיס הנתונים

את ההתקשרות עם בסיס הנתונים נציב לתוך קבוע $connection כדי שתהיה לנו גישה אליו במהלך ההתקשרות. 

mysqli_connect_error משמש לדיווח שגיאות של mysqli.

<?php
//צור קשר
$connection = mysqli_connect(DB_HOST ,DB_USER ,DB_PASS ,DB_NAME);

// בדוק את הקשר
if (mysqli_connect_errno($connection))
{
  echo "Failed to connect:" . mysqli_connect_error();
  exit();
}

// הגדרת סט הנתונים כדי שיתמוך בעברית
mysqli_set_charset($connection, "utf8");

 

שאילתות מסוגים שונים

1. הכנסת רשומה למסד הנתונים באמצעות INSERT, ודיווח שגיאות בהתאם.

<?php
//שאילתה להכנסת רשומה למסד הנתונים
$name = mysqli_real_escape_string($connection, "יוסי");
$city = mysqli_real_escape_string($connection, "tel aviv");
$active = (int)1;

$sql = "INSERT INTO users(name, city, active)  VALUES ('{$name}', '{$city}', '{$active}')";

if(mysqli_query($connection, $sql))
{
  // מה מספר הרשומה שהוכנסה למסד הנתונים?
  $lastInsertedId = mysqli_insert_id($connection);
  echo "The last inserted id is: " . $lastInsertedId;
}
else 
{
  exit('Error: ' . mysqli_error($connection));
}
  • ה-id כלל אינו מוזכר מפני שהוא צריך להיות מוגדר כ AUTO_INCREMENT מה שיגרום להכנסת הרשומה החדשה למסד הנתונים תחת מזהה ייחודי.
  • כדי להכניס נתונים באופן בטוח למסד הנתונים משתמשים ב- mysqli_real_escape_string.
  • במקרה שידוע סוג הנתונים מומלץ להשתמש בהמרה לסוג. לדוגמה, int כשרוצים להכניס מספרים שלמים.
  • מסיבות אבטחה, רצוי מאוד לשקול להשתמש במסננים שמספקת PHP או בביטויים רגולריים.

 

2. שאילתה לקריאה מבסיס הנתונים באמצעות SELECT

//שאילתה לקריאה מבסיס הנתונים
$sql = "SELECT name, city, active FROM users WHERE (id BETWEEN 1 AND 7)";

if($result = mysqli_query($connection,$sql)) 
{
  // מספר הרשומות המוחזרות בשאילתה
  $count = mysqli_num_rows($result);

  // שליפת הרשומות בתוך לולאה
  while($row = mysqli_fetch_assoc($result))
  {
    echo $row['name'] . " ";
    echo $row['city'] . " ";
    echo $row['active'] . " ";
  }
} 
else 
{
  echo "SELECT failed: " . mysqli_connect_error();
}

 

3. שאילתה לעדכון רשומה בבסיס הנתונים באמצעות UPDATE

// Update query
$sql = "UPDATE users SET name = 'יוסף' WHERE id= 1";
$result = mysqli_query($connection,$sql);
if (mysqli_affected_rows($connection) > 0) {
    var_dump("Update success");
} else {
    var_dump("Update failed");
}

 

4. מחיקת רשומה מבסיס הנתונים באמצעות DELETE


$sql = "DELETE FROM users WHERE uid = 1 ";

if (mysqli_query($connection,$sql)) {
  echo "Sql deleted successfully.";
} else {
  echo "DELETE failed: " . mysqli_connect_error();
}

  

סגירת התקשורת עם בסיס הנתונים

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

// סגירת התקשרות עם בסיס הנתונים
mysqli_close($connection);

   

בונוס למתמידים: איך להדפיס שאילתות ארוכות בצורה שתהיה נוחה לקריאה

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

$sql = "INSERT INTO `user`
          (`id`, `comp_id`, `name`, `email`, `phone`, `comment`, `created_at`, `updated_at`, `active`) 
          VALUES 
          (NULL,
          '12',
          'Moshe',
          'Moshe@moshe.xom',
          '055-5555555',
          'Not a real person',
          '2020-10-08 09:40:32',
          '2020-10-08 09:40:32',
          '1');";

נדפיס:

echo $sql;

התוצאה:

INSERT INTO `user` (`id`, `comp_id`, `name`, `email`, `phone`, `comment`, `created_at`, `updated_at`, `active`) VALUES (NULL, '12', 'Moshe', 'Moshe@moshe.xom', '055-5555555', 'Not a real person', '2020-10-08 09:40:32', '2020-10-08 09:40:32', '1');
  • קשה לקריאה.

הקוד הבא ישבור את המחרוזת הארוכה שהיא שאילתת ה- SQL בכל מקום שיש שורה חדשה:

// Explode the query string into lines
$lines = explode(PHP_EOL, $sql);

// Add PHP_EOL at the end of each line
$sqlWithEOL = implode(PHP_EOL, array_map(function($line) {
    return $line . PHP_EOL;
}, $lines));

echo $sqlWithEOL;

התוצאה:

INSERT INTO `user`
(`id`, `comp_id`, `name`, `email`, `phone`, `comment`, `created_at`, `updated_at`, `active`)
VALUES
(NULL,
'12',
'Moshe',
'Moshe@moshe.xom',
'055-5555555',
'Not a real person',
'2020-10-08 09:40:32',
'2020-10-08 09:40:32',
'1');
  • קריאה וברורה הרבה יותר.

נסביר:

  • בכל מקום בו יורדים שורה שוברים את המחרוזת לפריט נפרד של המערך $lines באמצעות המתודה explode().
  • את המערך מאחדים חזרה למחרוזת באמצעות הפונקציה implode() כאשר בין הפריטים מחבר שובר שורות PHP_EOL שאמור לעבוד תמיד כי הוא יודע להתאים את שובר השורות לסביבת העבודה.

 

במדריך הבא תוכלו ללמוד על PDO: הרחבת PHP לעבודה עם מסדי נתונים, שנחשבת לדרך המומלצת ביותר לעבודה עם PHP מול מסד הנתונים.

בנוסף, ישנה סדרה של מדריכים המוקדשים לעבודה עם mySQL.

 

לכל מדריכי ה-PHP

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

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

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

שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

איך אומרים בעברית אינטרנט?