אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » מדריכים » לימוד MySQL » MySQL ב-PHP מונחה עצמים

MySQL ב-PHP מונחה עצמים

רן בר-זיק ינואר 2, 2010 9:57 pm אין תגובות

שימוש בהרחבת MySQLi על מנת לקבל נתונים ל-PHP

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

במאמר הקודם למדנו על כיצד לעשות אינטגרציה בין PHP פרוצדורלי ל-MySQL (הרחבת MySQL). במאמר הזה אנו נלמד על הרחבת MySQLi שמאפשרת אינטגרציה פשוטה ביותר עם MySQL ב-PHP מונחה עצמים.

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

כשאני כותב על הרחבת MySQLi אני מתכוון לתוספת לשפת ה-PHP שמותקנת ב-Default ברוב התקנות ה-PHP. מגרסה 5 ההרחבה הזו נכללת כבר ב-PHP 5 ויש המלצה חד משמעית להשתמש בה ולא בהרחבת MySQL שעליה למדנו במאמר הקודם.

באופן עקרוני כל העבודה נעשית באמצעות class שנקרא mysqli (אם תהיתם i מלשון improved). לאובייקט שנוצר לפי class זה יש מתודות ותכונות שמאפשרות לנו גישה לכל מאפייני החיבור של MySQL ואפשרות לשיגור שאילתות וקבלת מידע.

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

חיבור ל-DataBase

ה-Constructor של האובייקט מקבל 4 פרמטרים: ה-host (בדרך כלל local host), שם המשתמש, הסיסמה וכן שם מסד הנתונים שאנו עובדים מולו (מקביל לפקודת USE ב-MySQL). כך בדוגמא שלנו אנו מייצרים אובייקט של הקשר עם MySQL.


$mysqli = new mysqli("localhost", "internet_user", "123456", "internet_database");

לאובייקט זה (בדוגמא שלנו $mysqli) מתודות ותכונות שיסייעו לנו לנהל את הקשר עם MySQL. כל המתודות והתכונות מתוארות בפירוט בדוקומנטציה של PHP הקשורה ל-MySQLi.

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


$result = $mysqli->query("SELECT * FROM my_costumer")

ה-result שלנו הוא גם סוג של אובייקט שמחזיק resource. האובייקט הזה נקרא MySQLi_Result class וגם לו יש מתודות ותכונות משלו. כך למשל, אחת התכונות היא num_rows שמראה לנו כמה שורות יש ב-resource שלנו – או יותר נכון כמה שורות השאילתא שלנו החזירה. אם נריץ את הקוד הבא:


$mysqli = new mysqli("localhost", "internet_user", "123456", "internet_database");

if ($result = $mysqli->query("SELECT * FROM my_costumer")) {
echo $result->num_rows;
}

נקבל את התוצאה 7, שהיא מספר השורות שיש בטבלת my_costumer.

לאובייקט התוצאה יש 3 מתודות שונות לקבל הערך של השורה: fetch_assoc לקבלת מערך אסוציאטיבי, fetch_object לקבלת השורה כאובייקט ו-fetch_row לקבל השורה כמערך רגיל. כמו בשיטה הפרוצדורלית, בכל פעם נסרקת שורה אחת ואם אנו רוצים יותר משורה אחת, עלינו להשתמש בהצהרת while (או בכל לולאה אחרת). כך למשל, אם אני רוצה לקבל מערך אסוציאטיבי של כל התוצאות מה-SELECT שלי, אני נדרש לעשות while:


$mysqli = new mysqli("localhost", "internet_user", "123456", "internet_database");

if ($result = $mysqli->query("SELECT * FROM my_costumer")) {

	while ($result->fetch_object()) {
		print_r($result->fetch_assoc());
	}
}

Prepared Statements

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

איך עושים את זה? ראשית מבצעים חיבור MySQLi רגיל:


$mysqli = new mysqli("localhost", "internet_user", "123456", "internet_database");

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


$stmt = $mysqli->prepare("SELECT * FROM my_costumer where costumer_name=? LIMIT 1");

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


$stmt->bind_param('s', $costumerName); 

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

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


$costumerName = 'Omri';

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


$mysqli = new mysqli("localhost", "internet_user", "123456", "internet_database");
$stmt = $mysqli->prepare("SELECT * FROM my_costumer where costumer_name=? LIMIT 1");
$stmt->bind_param('s', $costumerName); 

$costumerName = 'Omri';

$stmt->execute(); 

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


$mysqli = new mysqli("localhost", "internet_user", "123456", "internet_database");
$stmt = $mysqli->prepare("SELECT * FROM my_costumer where costumer_name=? LIMIT 1");
$stmt->bind_param('s', $costumerName); 

$costumerName = 'Omri';

$stmt->execute(); 

$stmt->bind_result($cost_id, $cost_name, $cost_age, $cost_sex);

while ($stmt->fetch()) {
        print("ID : $cost_id , NAME : $cost_name , AGE : $cost_age , SEX : $cost_sex");
}
/*

אם תריצו את הדוגמא על ה-DB שלנו. תראו שהוא מביא לכם את התוצאה הבאה:


ID : 7 , NAME : Omri , AGE : 9 , SEX : male

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

⚠️המדריכים כאן הם טעימה בלבד! יש ספר מקיף המלמד MySQL מרמת בסיס ועד רמה מתקדמת. הספר הדיגיטלי, שרלוונטי גם לכל מסדי הנתונים שעובדים עם SQL – זמין כאן כחלק מהפרויקט "ללמוד ג'אווהסקריפט בעברית" – זו הדרך הטובה ביותר ללמוד באופן מקיף MySQL.

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

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
למדריך ה-MySQL הקודםMySQL ו-PHP
למדריך ה-MySQL הבאמודלים של מסדי נתונים
לתפריט המדריכים ל-MySQL
MySQL OOP
ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

    בחשבון הטוויטר שלי אני מפרסם עדכונים מהירים על חדשות בתחום התכנות והיזמות, התרעות על מצבי חירום ורכילות בוערת על תחום הווב.
    מה זה טוויטר?
  • facebook like image

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

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

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

גלילה לראש העמוד