מדריך PHP

מדריך PHP: התקנת MySQL ושימוש בהרחבת MySQL

‏ • Internet Israel

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

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

image

או הכנסו עם internet explorer לכתובת הבאה: http://www.microsoft.com/web/gallery/install.aspx?appid=MySQL

לאחר פרק זמן קצר יפתח החלון הבא:

Allow WPI

מיד לאחר האישור, יפתח בפנינו חלון נוסף שמבקש אישור להפעלת תוכנת Web Platform Installer:

image

אחרי האישור יופיעו בפנינו פרטי התוכנה (MySQL במקרה הזה(, נוכל לעיין בפרטי התוכנה וללחוץ על אישור:

image

אחרי כן יופיע הסבר נוסף, גם שם נצטרך ללחוץ על אישור:

image

מה שנצטרך לעשות עכשיו זה לבחור סיסמה עבור ה-user הראשוני, הלא הוא root. ביחרו סיסמה פשוטה ותזכרו אותה:

image

עכשיו ההתקנה מתחילה, היא תיקח מעט זמן:

image

אם הכל תקין, תראו את המסר הזה בסיום ההתקנה:

image

זהו! ההתקנה הסתיימה בהצלחה! עכשיו נוכל לגשת ל-MySQL workbench ול-console באמצעות החלונות שלנו:

image

בואו וניצור טבלה בשם clients במסד הנתונים test (כבר קיים) עם הקונסולה שלנו:

image

פשוט תריצו את הפקודות האלו:

USE test;

CREATE TABLE clients (name VARCHAR(20), age TINYINT);

INSERT INTO clients (name,age) VALUES ('moshe', '22'),('ran', '33'),('omri', '40');

עכשיו נוכל לחזור לאתר שלנו ולהתחיל לעבוד, ראשית אנו ניצור connection.

WebMatrix לא מאפשרת לנו יצירת מסד נתונים באמצעות MySQL, אנו יכולים ליצור (כפי שעשינו זאת) מסד נתונים באמצעות ה-console או באמצעות mysql workbench שמותקנת בתהליך ההתקנה של מסד הנתונים.

בואו וניצור connection, נכנס דרך התפריט בצד שמאל למטה אל Databases ונלחץ על New Connections:

image

נבחר שם ל-connection הזה, נקליד את שם המשתמש והסיסמה (במקרה שלנו root) ואת שם מסד הנתונים. לא נשכח לסמן V ליד זכירת הסיסמה ושמירה בweb.config-:

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

image

אחרי שסיימנו להתקין את מסד הנתונים, אפשר להמשיך הלאה.

כאשר אנו יוצרים שאילתת MySQL, אנו צריכים לעבור ארבעה שלבים – חיבור ראשוני לשרת ה-MySQL עצמו, בחירת מסד הנתונים שלנו, העברת השאילתה עצמה ולבסוף חילוץ התשובה מה-resource שמוחזר לנו

בואו נבצע חיבור ראשוני ל-MySQL:

<?php
$link = mysql_connect("localhost", "root", "123456");
if (!$link) {
    die("Could not connect: " . mysql_error());
}
print "Connected successfully";

אם כתבנו את שם המשתמש כשורה ואת הסיסמה כשורה, הפקודה תחזיר לנו רפרנס לקישור שבו נשתמש בהמשך. אם משהו משתבש, פקודת mysql_error מחזירה לי את סיבת התקלה.

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

 

<?php
$link = mysql_connect("localhost", "root", "123456");
if (!$link) {
    die("Could not connect: " . mysql_error());
}
print "Connected successfully";


$db_selected = mysql_select_db("test", $link);
if (!$db_selected) {
    die ("Can't use internet_database : " . mysql_error());
}
print "Selected successfully";

כעת נותר לנו לבצע את שאילתת ה-MySQL. בואו נבצע איזה SELECT חביב לשם הדוגמה. את השאילתה עושים באמצעות mysql_query שמחזיר לנו resource. מה זה resource? עוד מעט נלמד, בינתיים – שימו לב לפקודת mysql_query:

<?php
$link = mysql_connect("localhost", "root", "123456");
if (!$link) {
    die("Could not connect: " . mysql_error());
}


$db_selected = mysql_select_db("test", $link);
if (!$db_selected) {
    die ("Can't use internet_database : " . mysql_error());
}

$result = mysql_query('SELECT * FROM test');

כפי שאמרתי, פקודת mysql_query מחזירה לנו resource, מדובר בסוג משתנה שונה ממה שאנו מכירים, אם ננסה להדפיס אותו בדפדפן, אנו נראה משהו ממש מוזר:

image

אז הבנו שמדובר במשהו שהוא לא משתנה שמוכר לנו. מדובר ב-resource, רפרנס לנתון מסוים. אנו נתקל בו עוד מספר פעמים.

resource הוא לא מערך או אובייקט. מה resource-הזה אנו צריכים לחלץ את מה שאנו צריכים – שורה אחר שורה.

באופן עקרוני, אנו יכולים לחלץ שורה בכל פעם מה-resource בכמה אופנים – כמערך רגיל, מערך אסוציאטיבי או כאובייקט.

על מנת לקבל את השורה כמערך רגיל אנו נשתמש בפונקצית mysql_fetch_row. אם אנו רוצים לקבל את השורה כמערך אסוציאטיבי, אנו נשתמש בפונקצית mysql_fetch_assoc. ואם אנו רוצים לקבל את השורה כאובייקט, אנו נשתמש בפונקצית mysql_fetch_object.

מבלבל? בואו ונדגים, אני אשתמש בפונקצית _fetch_array mysql כדי לשלוף מערך מהמשתנה:

<?php
$link = mysql_connect("localhost", "root", "123456");
if (!$link) {
    die("Could not connect: " . mysql_error());
}

$db_selected = mysql_select_db("test", $link);

if (!$db_selected) {
    die ("Can't use internet_database : " . mysql_error());
}

$result = mysql_query('SELECT * FROM clients');

$my_array = mysql_fetch_assoc($result);

print_r($my_array);

אני אקבל את התוצאה הזו:

image

אנו מקבלים שורה אחת בלבד, לאן נעלם שאר המידע? מה עם שאר השורות? כפי שציינתי, הקריאה מה-resource היא שורה אחר שורה, אם אני אריץ שוב את _fetch_array mysqlואדפיס את התוצאה:

 

<?php
$link = mysql_connect("localhost", "root", "123456");
if (!$link) {
    die("Could not connect: " . mysql_error());
}

$db_selected = mysql_select_db("test", $link);
if (!$db_selected) {
    die ("Can't use internet_database : " . mysql_error());
}

$result = mysql_query('SELECT * FROM clients');

$my_array = mysql_fetch_assoc($result);

print_r($my_array);

$my_array = mysql_fetch_assoc($result);

print_r($my_array);

אני אראה את התוצאה הבאה:

 

image

כלומר, יש משתנה שנקרא internal result pointer שמקושר לכל resource וresource שבכל פעם שאנו מריצים פקודת fetch (ולא משנה מה היא מחזירה) אותו pointer זז קדימה. באמצעות פונקצית mysql_data_seek אנו יכולים לשלוט על מיקום אותו פוינטר. כך למשל בסקריפט הבא אני אבקש להתחיל משורה 2:

<?php
$link = mysql_connect("localhost", "root", "123456");
if (!$link) {
    die("Could not connect: " . mysql_error());
}

$db_selected = mysql_select_db("test", $link);
if (!$db_selected) {
    die ("Can't use internet_database : " . mysql_error());
}

$result = mysql_query('SELECT * FROM clients');

mysql_data_seek ($result , 2);

$my_array = mysql_fetch_assoc($result);

print_r($my_array);

זו התוצאה שתצא לי:

image

כלומר הרשומה השלישית, כיוון שהפוינטר הוזז למקום השני.

ניתן לקבל באמצעות פקודת mysql_num_rows את מספר השורות שיש ב-resource שלנו ואם אנו רוצים לקבל את כל התשובות אז אפשר להריץ לולאה. אך ניתן גם להשתמש ב-While:

<?php
$link = mysql_connect("localhost", "root", "123456");
if (!$link) {
    die("Could not connect: " . mysql_error());
}

$db_selected = mysql_select_db("test", $link);
if (!$db_selected) {
    die ("Can't use internet_database : " . mysql_error());
}

$result = mysql_query('SELECT * FROM clients');

while ($row = mysql_fetch_assoc($result)) {
    print_r($row);
}

ועוד הערה לפני סיום: רוב השאילתות שלנו יהיו עם כמה (וכמה) משתנים. מקובל מאד להשתמש בפונקצית sprintf על מנת להכניס אותם אל השאילתא. לדוגמא:

<?php
$link = mysql_connect("localhost", "root", "123456");
if (!$link) {
    die("Could not connect: " . mysql_error());
}

$db_selected = mysql_select_db("test", $link);
if (!$db_selected) {
    die ("Can't use internet_database : " . mysql_error());
}

$result = mysql_query(sprintf("SELECT * FROM clients where name='%s' LIMIT 1", "omri"));

print_r(mysql_fetch_array($result));

כדאי לשים לב שברגע ששמתי LIMIT 1 אני לא צריך להשתמש ב- whileכי אני יודע שתהיה אך ורק שורת תוצאה אחת בלבד לשאילתה שלי.

והתוצאה כמובן תהיה:

image

תגיות: , ,

רן בר-זיק

מתכנת PHP מנוסה ובעל ידע רב בפיתוח לאינטרנט על בסיס LAMP. מומחה במערכות דרופל, ג'ומלה ו-וורדפרס. שולט היטב בכל מה שקשור לפרונט אנד: JavaScript: jQuery ו-MooTools,ActionScript 2/3 וכמובן HTML 5 + CSS 3.אינטרנט ישראל: www.internet-israel.com

תגובות בפייסבוק