מדריך PHP: התקנת MySQL ושימוש בהרחבת MySQL
ההנחה היא שהנכם יודעים מהו MySQL ואת שפת SQL שמשמשת אותנו כאשר אנו שולפים נתונים ממסד הנתונים. במידה ולא, אתם מוזמנים ללימוד מקיף במדריך ה-MySQL שכתבתי.
אם אתם יודעים מה זה MySQL ואיך לשלוף ממנו נתונים, כדאי שנתחיל בהתקנה שלו! אני מניח שמותקנת אצלכם התוכנה webmatrix שעליה הדגמנו וההסברים התבססו על השימוש בה. לחצו על הכפתור הזה:
או הכנסו עם internet explorer לכתובת הבאה: http://www.microsoft.com/web/gallery/install.aspx?appid=MySQL
לאחר פרק זמן קצר יפתח החלון הבא:
מיד לאחר האישור, יפתח בפנינו חלון נוסף שמבקש אישור להפעלת תוכנת Web Platform Installer:
אחרי האישור יופיעו בפנינו פרטי התוכנה (MySQL במקרה הזה(, נוכל לעיין בפרטי התוכנה וללחוץ על אישור:
אחרי כן יופיע הסבר נוסף, גם שם נצטרך ללחוץ על אישור:
מה שנצטרך לעשות עכשיו זה לבחור סיסמה עבור ה-user הראשוני, הלא הוא root. ביחרו סיסמה פשוטה ותזכרו אותה:
עכשיו ההתקנה מתחילה, היא תיקח מעט זמן:
אם הכל תקין, תראו את המסר הזה בסיום ההתקנה:
זהו! ההתקנה הסתיימה בהצלחה! עכשיו נוכל לגשת ל-MySQL workbench ול-console באמצעות החלונות שלנו:
בואו וניצור טבלה בשם clients במסד הנתונים test (כבר קיים) עם הקונסולה שלנו:
פשוט תריצו את הפקודות האלו:
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:
נבחר שם ל-connection הזה, נקליד את שם המשתמש והסיסמה (במקרה שלנו root) ואת שם מסד הנתונים. לא נשכח לסמן V ליד זכירת הסיסמה ושמירה בweb.config-:
אחרי שנוצר קישור חדש, אנו נוכל להסתכל על מסד הנתונים שלנו:
אחרי שסיימנו להתקין את מסד הנתונים, אפשר להמשיך הלאה.
כאשר אנו יוצרים שאילתת 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, מדובר בסוג משתנה שונה ממה שאנו מכירים, אם ננסה להדפיס אותו בדפדפן, אנו נראה משהו ממש מוזר:
אז הבנו שמדובר במשהו שהוא לא משתנה שמוכר לנו. מדובר ב-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);
אני אקבל את התוצאה הזו:
אנו מקבלים שורה אחת בלבד, לאן נעלם שאר המידע? מה עם שאר השורות? כפי שציינתי, הקריאה מה-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);
אני אראה את התוצאה הבאה:
כלומר, יש משתנה שנקרא 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);
זו התוצאה שתצא לי:
כלומר הרשומה השלישית, כיוון שהפוינטר הוזז למקום השני.
ניתן לקבל באמצעות פקודת 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כי אני יודע שתהיה אך ורק שורת תוצאה אחת בלבד לשאילתה שלי.
והתוצאה כמובן תהיה:
תגובות בפייסבוק