האם PHP עובד עם MySQL בלבד
האם יש צורך להשתמש ב- PHP כדי להתחבר ל- MySQL?
כשמדובר בחיבור למסד נתונים של MySQL, PHP מציע פיתרון נוח ויעיל. עם PHP, אינך צריך להוריד קוד נוסף או להתקין תוספים כדי להתחבר ל- MySQL. למעשה, PHP מוכן להתחבר ל- MySQL ממש מהקופסה, מה שהופך אותו לכלי רב עוצמה לקישוריות מסד נתונים.
חיבור PHP ל- MySQL הוא פשוט כמו לעקוב אחר כמה צעדים:
- התחבר להתקנת MySQL.
- השתמש במסד הנתונים של MySQL הנכון.
- שלח שאילתות SQL למסד הנתונים.
- אחזר וטיפול בתוצאות.
צעדים אלה משמשים כבסיס לכל סקריפט PHP המקיים אינטראקציה עם מסד נתונים. בין אם אתה יוצר טבלאות, מבצע חיפושים או הוספת נתונים למסד הנתונים, שני הצעדים הראשונים נשארים קבועים.
בואו נסתכל מקרוב בתהליך החיבור למסד נתונים של MySQL ב- PHP:
כדי ליצור חיבור, סקריפט ה- PHP שלך צריך להכיר את מארח מסד הנתונים, שם המשתמש והסיסמה. מידע זה מאפשר ל- PHP ליזום את החיבור בדיוק כמו שהיית עושה בעת שימוש בלקוח שורת הפקודה MySQL.
התחל ביצירת סקריפט PHP חדש בשם “Connect.PHP “והזן את השורות הבאות:
שים לב שאם מסד הנתונים שלך פועל באותה מכונה כמו קבצי ה- PHP ושירות האינטרנט שלך, שם המארח של מסד הנתונים יהיה בדרך כלל “LocalHost.”
הפקודה “mysql_connect” מקבלת את מארח מסד הנתונים, שם המשתמש והסיסמה כפרמטרים ויוזמת את החיבור. אם החיבור נכשל, פונקציית “Die” משמשת להצגת הודעת שגיאה כדי למנוע את המשך הסקריפט. אחרת, התסריט מציג הודעת חיבור מוצלחת.
על ידי ביצוע הצעדים הללו, אתה יכול בקלות לחבר PHP למסד נתונים של MySQL ולמנף את הכוח של MySQL ביישומי האינטרנט שלך.
שאלות נפוצות:
1. מדוע נוח להשתמש ב- PHP לחיבור ל- MySQL?
PHP מגיע מוכן להתחבר ל- MySQL ללא צורך בקוד או תוספים נוספים. נוחות זו חוסכת זמן ומאמץ בבניית יישומי אינטרנט הדורשים קישוריות מסד נתונים.
2. האם אוכל להשתמש ב- PHP כדי להתחבר למסד נתונים מרוחק של MySQL?
כן, PHP מאפשר לך להתחבר למסדי נתונים של MySQL מרוחקים על ידי מתן המארח, שם המשתמש והסיסמה המתאימים. רק וודא שיש לך את זכויות הגישה הנדרשות וקישוריות הרשת כדי לקבוע את החיבור.
3. מהם הצעדים החיוניים לחיבור PHP ל- MySQL?
הצעדים החיוניים לחיבור PHP ל- MySQL כוללים אספקת מארח מסד הנתונים, שם המשתמש והסיסמה, הקמת החיבור עם הפקודה “mysql_connect” וטיפול בשגיאות פוטנציאליות באמצעות פונקציית “Die”. לאחר חיבור, אתה יכול לבצע שאילתות SQL ולטפל בתוצאות שהוחזרו.
4. האם ניתן להשתמש ב- PHP כדי להתחבר למסדי נתונים שאינם MySQL?
כן, PHP תומך בחיבורים למאגרי מידע שונים שאינם MySQL, כולל PostgreSQL, Oracle ו- Microsoft SQL Server. עם זאת, הצעדים והפונקציות הספציפיים עשויים להשתנות בהתאם למערכת מסד הנתונים שאתה מתחבר אליה.
5. כמה בטוח זה לחבר PHP ל- MySQL?
אבטחה בקישוריות מסד נתונים תלויה במספר גורמים כמו אבטחת סביבת השרת כראוי, שימוש בסיסמאות חזקות ושימוש בשיטות עבודה מומלצות להגנה על נתונים רגישים. PHP עצמו מספק פונקציות וטכניקות למניעת הזרקת SQL ופגיעויות אבטחה אחרות, אך על המפתחים גם ליישם אמצעי אבטחה נוספים כדי להבטיח את האבטחה הכוללת של היישום.
6. האם סקריפטים של PHP מרובים יכולים להתחבר לאותו מסד נתונים MySQL בו זמנית?
כן, סקריפטים של PHP מרובים יכולים להתחבר לאותו מסד נתונים MySQL בו זמנית. עם זאת, חשוב לנהל קשרים ומשאבים ביעילות כדי למנוע קונפליקטים ובעיות ביצועים. סגירת חיבורי מסד נתונים כראוי ושימוש בטכניקות איגום חיבורים יכולה לעזור לייעל את הגישה למסד הנתונים בסביבות מרובות תסריט.
7. כיצד אוכל לפתור שגיאות חיבור בעת שימוש ב- PHP ו- MySQL?
בעת פגישת שגיאות חיבור, בדוק את המארח, שם המשתמש והסיסמה המסופקים כדי להבטיח את דיוקם. ודא ששרת MySQL פועל ונגיש מסביבת PHP. ניתן לאפשר גם דיווח על שגיאות ב- PHP לספק הודעות שגיאה מפורטות יותר, המסייעות בפתרון בעיות ובפתרון בעיות חיבור.
8. האם ניתן לחבר PHP למסדי נתונים מרובים של MySQL?
כן, PHP מאפשר לך להתחבר למספר מסדי נתונים של MySQL בתוך אותו סקריפט או על פני סקריפטים שונים. כל שעליך לעשות הוא ליצור חיבורים נפרדים באמצעות פרמטרים שונים עבור כל בסיס נתונים. קחו בחשבון שניהול חיבורים מרובים ביעילות הוא קריטי לשמירה על ביצועים ושימוש במשאבים.
9. האם אוכל להשתמש בהצהרות מוכנות ל- PHP עם MySQL?
כן, PHP תומך בהצהרות מוכנות, המספקות דרך מאובטחת ויעילה לבצע שאילתות SQL עם נתונים המסופקים על ידי המשתמש. הצהרות מוכנות עוזרות למנוע התקפות הזרקת SQL על ידי הפרדת היגיון השאילתה מכניסת נתונים.
10. האם יש חלופות ל- PHP לחיבור ל- MySQL?
בעוד ש- PHP היא בחירה פופולרית לחיבור ל- MySQL בגלל הפשטות והאימוץ הרחב שלה, שפות תכנות אחרות כמו פייתון, Java ו- C# מספקות גם ספריות וממשקי API לאינטראקציה עם מאגרי MySQL. בחירת השפה תלויה בדרישות ובהעדפות הפרויקט.
האם יש צורך להשתמש ב- PHP כדי להתחבר ל- MySQL
קבועים מוקלדים באותיות של כל מעלות. כובעים אינם’לא נדרש, אבל זה’זה עוד אחד כזה “דבר כמו מתכנת PHP” דברים. אתה רוצה קבועים שייראו שונה ממשתנים, ושימוש בכל שמות האסיפה הגדולה היא דרך אחת לעשות זאת. קבועים גם הם לא’לא יהיה $ לפני שמם, שזו דרך נוספת להבדיל קבוע למשתנה.
PHP & MySQL: המדריך החסר מאת ברט מקלונין
קבל גישה מלאה ל PHP & MySQL: המדריך החסר ו- 60K+ כותרות אחרות, עם ניסיון חינם של 10 ימים של אורלי.
ישנם גם אירועים חיים, קורסים שאוצרים על ידי תפקיד עבודה ועוד.
פרק 4. חיבור PHP ל- MySQL
עכשיו כשאתה’ראיתי קצת מהעוצמה גם של PHP וגם MySQL, זה’הגיע הזמן להפגיש בין שני הג’וגנאוטים האלה. עם שפות תכנות רבות, בכל עת שתרצה לדבר עם בסיס נתונים, עליך להוריד ולהתקין קוד נוסף, או להתקין דגמי פלאגין קטנים המעניקים לתוכניות שלך תמיכה בשיחה עם מסד נתונים זה. Php isn’אבל זה לא ככה; זה מוכן להתחבר ל- MySQL מרגע שאתה מריץ את PHP פקודה.
למרות שאתה’רק לאחרונה התחיל את המסע שלך ל- PHP Mastery, אתה’מוכן להשתמש במסד נתונים מהסקריפטים שלך. אתה רק צריך ללמוד כמה פקודות חדשות וכיצד להתמודד עם הבעיות שיכולות לעלות כשאתה’עבודה מחדש עם מסד נתונים. למעשה, אתה’חוזר לבנות טופס פשוט המאפשר לך להיכנס ל- SQL ולהריץ אותו כנגד מסד הנתונים של MySQL שלך. כאשר אתה’Re מתכנת PHP אתה יכול לחרוג מ mysql כלי שורת פקודה.
ואז, לשים דובדבן על גבי הסנדות המתנשאות שלך של PHP ו- MySQL Goodness, אתה’אכתוב תסריט נוסף. סקריפט זה ייקח את כל המידע מהטפסים שאתה’בנה, הוסף מידע זה למסד נתונים ואז הוסף טופס אחד נוסף כדי לאפשר למשתמשים שלך לחפש משתמש אחר בשם. כל זה בפרק אחד? אכן כן.
כתיבת סקריפט חיבור PHP פשוט
לא משנה כמה פשוט או מתקדם סקריפטים של PHP, אם הם מדברים עם בסיס נתונים, הם’אני מתחיל באותם שלבים כמה:
- התחבר להתקנת MySQL.
- להשתמש מסד הנתונים של MySQL הנכון.
- שלח SQL למסד הנתונים.
- להחזיר את התוצאות.
- לעשות משהו עם התוצאות.
שלבים 3, 4 ו- 5 ישתנו בהתאם למה שאתה’עושה מחדש. סקריפט שיוצר טבלאות נראה מעט שונה מתסריט המחפש דרך טבלאות קיימות.
אבל הזוג הראשון של הצעדים הראשונים – חיבור ל- MySQL ומשתמש במסד הנתונים הנכון – הם תמיד זהים, לא משנה כמה מפואר התסריט שלך. רק תחשוב, ואז: הקוד שאתה’מחדש עומד לכתוב הוא אותו קוד שמתכנתים מרוויחים 150 או 200 $ לשעה כותבים איפשהו. (הֵם’רק כותב את הקוד הזה בבתים הרבה יותר מהודרים עם רובוטים המגישים להם תה קר כשהם מתרוממים ליד הבריכה.)
חיבור למסד נתונים של MySQL
ראשית, עליכם לספר לסקריפט PHP שלכם כיצד להתחבר למסד נתונים. תהליך זה בעצם אומר ל- PHP לעשות את מה שעשית כשהתחלת את לקוח שורת הפקודה MySQL שלך (MySQL ב- Mac OS X). כשאתה מחובר לשרת האינטרנט שלך’מסד הנתונים, כנראה שהשתמשת בפקודה כמו העוקב:
bmclaugh@akila: ~ $ mysql-host = dc2-mysql-02.Kattare.com --user = bmclaugh -password
אתה זקוק לאותם פיסות מידע כדי לתת PHP כדי שיוכל להתחבר: מארח מסד הנתונים שלך, שם המשתמש שלך וסיסמא.
הפלג את עורך הטקסטים שלך וצור סקריפט חדש; קורא לזה לְחַבֵּר.PHP . סקריפט זה יהיה פשוט ככל האפשר, מכיוון שכל מה שאתה צריך לעשות זה להתחבר למסד הנתונים שלך, להשתמש מסד הנתונים הנכון ואז הפעל שאילתת SQL לדוגמא כדי לוודא שהדברים פועלים כראוי.
בסקריפט שלך, הקלד את השורות הבאות:
שגיאה בחיבור למסד נתונים: " . mysql_error () . ""); הד"מחובר ל- MySQL!
"; ?>
הערה
אם אתה’הפעל מחדש את מסד הנתונים שלך באותה מכונה כמו קבצי ה- PHP ושירות האינטרנט שלך, שם המארח שלך מסד הנתונים הוא בדרך כלל מארח מקומי. מארח מקומי זו רק דרך לומר “המכונה המקומית.”
זה’זה באמת כל כך פשוט! וכמו רוב תסריטים האחרים של PHP’כותב, למרות שיש כמה פקודות חדשות, אתה בטח כבר יודע כמעט בדיוק מה בדיוק’זה הולך כאן.
ראשית, שם’פקודה חדשה: mysql_connect . פקודה זו פשוט מקבלת מארח מסד נתונים, שם משתמש וסיסמא ומתחבר. זה’בדיוק כמו שאתה’מחדש את שלך mysql כלי והתחברות למסד נתונים מרוחק.
הערה
וודא שאתה משנה שֶׁלְךָ.מאגר מידע.מארח, שם השם שלך , וכן הסיסמה שלך לערכים של מסד הנתונים שלך.
אבל מה עם לָמוּת קצת? נשמע קצת מחריד (כמו בעל זבוב מבעית, לא דמדומים Teen-Angst argesome). למעשה, זה קצת מגעיל: אתה משתמש לָמוּת כשמשהו מאי השתבש בתסריט שלך. חשוב על לָמוּת באומרו, “אם הקוד שלי מת, אז עשה משהו פחות מגעיל מאשר להשליך קוד שגיאה למשתמש שלי. במקרה הזה, לָמוּת מדפיס הודעת שגיאה שניצחה’T להפחיד את המשתמשים שלך.
אבל לפני שתוכלו להבין לָמוּת , אתה צריך לדעת קצת על הפעילות הפנימית של mysql_connect . מתי mysql_connect פועל, זה יוצר או משתמש בשימוש חוזר בחיבור קיים למסד הנתונים שלך. לאחר מכן הוא מחזיר את החיבור לתוכנית PHP שלך, ומנגיש את כל שאר ה- PHP-MYSQL מפקד עליך’ילמד על בקרוב. אבל אם mysql_connect פחית’לא ליצור את החיבור הזה – לדוגמה, אם בסיס הנתונים שלך הוא’לא פועל או אתה’יש מארח רע או שם משתמש – mysql_connect מחזיר ערך שונה מאוד: שֶׁקֶר .
אז מה’זה באמת קורה בתסריט שלך זה משהו כזה:
אבל זה הרבה הקלדה, אז PHP מאפשר לך לקצר אותה לדברים הבאים: שגיאה בחיבור למסד נתונים: " . mysql_error () . ""); הד"מחובר ל- MySQL!
"; ?>
לא רק שהתסריט הזה קצר יותר, אלא שהוא מעיף את הדברים קצת. בעיקרון זה אומר, נסה להתחבר (באמצעות mysql_connect ), ואם התוצאה היא’לא נכון (ה אוֹ חלק מהקוד), אם כן לָמוּת. לָמוּת מדפיס הודעת שגיאה, אבל זה גם “מת.” במילים אחרות, זה מסיים את התסריט שלך. אז אם mysql_connect החזרות שֶׁקֶר , וכן לָמוּת פועל, התסריט שלך ייצא. המשתמשים שלך ניצחו’אי פעם לא רואה את “מחובר ל- MySQL!” קו כי התסריט יפסיק לרוץ. זה’s מת ברצפת חדר השרת, בחיפוש אחר חיבור מסד נתונים עובד. (ראו את התיבה על כולם מתים בשלב מסוים לפרטים נוספים על לָמוּת פקודה.)
לא רק זה, אלא mysql_connect מגדיר פונקציה אחרת כשהוא יכול’t התחבר. זה הופך את השגיאות בהן נתקלה בניסיון להתחבר לזמינה דרך פקודה אחרת, mysql_error . אז אתה יכול להתקשר mysql_error כחלק שלך לָמוּת הצהרה כדי להראות מה באמת קרה.
הערה
באופן טכני, mysql_connect, mysql_error , וכן לָמוּת כולם דוגמאות ל פונקציות . פונקציה היא גוש קוד, בדרך כלל עם שם שהוקצה אליו, שתוכל להתקשר אליו מהקוד שלך בכל עת שאתה זקוק לחסימה זו. זה’s הרבה יותר מהיר ועדיף לקרוא לפונקציה בשם מאשר לשכתב את חסימת הקוד שהפונקציה מייצגת שוב ושוב.
דוֹן’לא לדאוג לפונקציות לעת עתה. פשוט השתמש בהם כמו כל פקודה PHP ישנה. לא עבר זמן רב, לא רק שתבינו פונקציות טוב יותר, אלא אתה’אהיה כותב משלך.
אם mysql_connect מתחבר ללא בעיות, הוא מחזיר את החיבור הזה. PHP ידלג על לָמוּת קו ואז לבצע קו זה:
הד "מחובר ל- MySQL!
";
כדי לראות פקודה זו בפעולה, צור טופס HTML פשוט וקרא לה לְחַבֵּר.html. אתה יכול להשתמש ב- HTML זה כדי לגרום לך ללכת:
PHP & MySQL: המדריך החסר
דוגמא 4-1מבחן חיבור SQL
סקריפט זה פשוט כמו שהוא מקבל: הוא בונה טופס, מפיל כפתור יחיד למקומו ומצמיד את הכפתור הזה לחדש שלך לְחַבֵּר.PHP תַסרִיט. טען את הטופס שלך בדפדפן (ראה איור 4-1) ולחץ “התחבר ל- MySQL.”
אני מקווה שאתה רואה את אחת ההודעות הפשוטות והמאושרות ביותר של ה- PHP המתפתח שלך וקריירת תכנות MySQL: אתה’מחובר מחדש! עיין באיור 4-2 למראה המתוק של ההצלחה.
איור 4-1. בטח, היית יכול לגרום לחיבור.HTML עוד יותר פשוט. היית יכול לזרוק את כל המבנה והפניה של CSS. אבל מי רוצה להתחבר למסד נתונים מבלי להשוויץ מעט? חוץ מזה, לקוחות כמו אתר נחמד ונקי. אתה לא דון’לא צריך לבלות שעות על CSS, אבל לגרום אפילו להדגמות הבסיסיות ביותר שלך להיראות מקצועיות, והלקוחות שלך יאהבו אותך בגלל זה.
איור 4-2. שלוש המילים הללו פירושן כי סקריפט ה- PHP שלך עכשיו יכול לעשות כמעט כל דבר שאתה יכול לדמיין עם מסד הנתונים שלך. אבל שם’משהו חסר: איך MySQL יודע איזה מסד נתונים הוא שלך? אתה עדיין צריך לומר ל- PHP באיזה מסד נתונים להשתמש.
בחירת מסד הנתונים לשימוש
שם’זה משהו נפלא מחכה סביב פינת התכנות עכשיו: כמעט כל mysql_ משפחת הפונקציות עובדת זהה: אתה נותן להם כמה ערכים, והם מחזירים משהו שימושי. אם קורה משהו רע, בדרך כלל אתה חוזר שֶׁקֶר או אובייקט לא קיים (משהו שרוב המתכנתים מתקשרים ריק אוֹ אֶפֶס ).
אז עכשיו אתה צריך לומר ל- MySQL באיזה מסד נתונים הסקריפט שלך ב- PHP רוצה להשתמש. שם’פונקציה לכך: mysql_select_db .
הערה
שם’משפחה מורחבת של mysql_ פונקציות. ייתכן שתרצה לסמן את דף התיעוד שלהם: www.PHP.NET/MANUAL/EN/Ref.mysql.PHP. אם אי פעם תיתקע, פנה לשם ובדוק אם פונקציה עשויה לעשות את מה שאתה צריך.
משתמשי חשמל’ מרפאה: כולם מתים בשלב מסוים
זה’קל לשכוח להפחיד להוסיף אותם לָמוּת הצהרות לסקריפטים שלך ב- PHP. PHP לא’לא ידרוש אותם, אז זה’זה שמח לחלוטין לקבל משהו כזה:
mysql_connect ("מסד נתונים.מנחה.com "," שם משתמש "," סיסמה ");
זֶה’אותו קוד אתה’יש כבר כתוב, אלא שזה פשוט משאיר את לָמוּת חֵלֶק.
אבל כאן’העניין: להפסיק את זה לָמוּת , וכשמשהו משתבש, התסריט שלך הולך להתרסק ולספק משהו ש’או שגיאה חסרת תועלת באמת, או משהו כל כך קריפי שאתה יכול’אפילו לספר מה זה. לדוגמה, אם אתה עוזב בחוץ לָמוּת , והזן סיסמה שגויה, והפעל את התסריט שלך, אתה’לקבל שגיאה דומה להלן:
לא יכול להתחבר לשרת MySQL מקומי דרך Socket '/TMP/MySQL.גרב '(2)
תאמינו או לא, הודעת השגיאה הזו היא למעשה די אינפורמטיבית, מכיוון שהדברים נעדרים לָמוּת הצהרות. הוספת שורה אחת של טיפול בשגיאות יכולה לעשות את ההבדל העצום עבור משתמש כאשר הדברים משתבשים.
למעשה, כשאתה מתחיל לבנות יישומי אינטרנט גדולים ומלאים הרבה יותר, אתה עלול להפנות את המשתמש שלך לדף שגיאה מעוצב יפה, להשלים עם פרטי קשר למנהל ולדוח שגיאה בסגנון CSS. אבל שום דבר מזה לא אפשרי בלי לָמוּת .
עכשיו, סומק בכוח PHP, אתה יכול כבר חושב שאתה עושה מעט מאוד שגיאות. אתה יכול לחשוב את זה לָמוּת מיועד לחובבי דרגה שלא’לא לכתוב קוד ללא רבב. למרבה הצער, כשאתה’קם בשעה שתיים בבוקר מנסה לפגוע במועד האחרון כדי שתוכל לקבל שכר, המוח שלך מתחיל להידמות, ובכן … זה של חובב דרגה. כולם עושים טעויות, ו לָמוּת (יחד עם טכניקות טיפול אחרות בשגיאות) הוא אחד מאותם מצבי חיים שעוזרים לך להיראות מוכנים ומקצועיים כאשר טעויות בלתי נמנעות אכן מתרחשות.
למעשה, המתכנתים הגבוהים ביותר, בעלי השכר הגבוה ביותר בעולם, הם גורואים בטיפול בשגיאות. יחד עם זאת, הם’כנראה לֹא באמצעות לָמוּת . הֵם’סביר יותר להשתמש במערכת טיפול בשגיאות חזקה יותר; משהו כמו השגיאה המטפלת בך’שימוש בפרק 7. אולם לעת עתה, שימוש בריא וליברלי לָמוּת יעזור לך להתרגל להוספת סוג של טיפול בשגיאות.
אתה נותן mysql_select_db שם בסיס נתונים, ו – ניחשתם נכון – זה להשתמש מסד נתונים זה, או חוזר שֶׁקֶר . אז עדכן לְחַבֵּר.PHP ל להשתמש בסיס הנתונים הנכון:
שגיאה בחיבור למסד נתונים: " . mysql_error () . ""); הד"מחובר ל- MySQL!
";
MySQL_SELECT_DB ("שם ה- DATABASE-NAME")
או למות("
שגיאה בבחירת מסד הנתונים BMCLAUGH: " .
mysql_error () . "
");
הד "
מחובר ל- MySQL, באמצעות מסד נתונים BMCLAUGH.
"; ?>
אתה כבר אמור לראות את התבנית. לָמוּת מוודא שאם דברים רעים יקרה, הסקריפט שלך מדווח על שגיאה, המשתמשים שלך קוראים את השגיאה הזו ואז הסקריפט יוצא. אם הדברים אכן הולכים טוב, הודעה מאושרת נוספת צריכה להדפיס.
נסה את הגרסה החדשה הזו. לְבַקֵר לְחַבֵּר.html שוב ונסה להתחבר (ועכשיו להשתמש ) בסיס הנתונים שלך. אתה רוצה לראות משהו כמו איור 4-3. הבא: דיבור SQL למסד הנתונים שלך.
איור 4-3. שוב, כמה מילים פשוטות, ודברים מרכזיים מתרחשים מאחורי הקלעים. לתסריט שלך יש כעת חיבור ל- MySQL, ומשתמש במסד הנתונים הנכון.
הצג את בסיס הנתונים שלך’שולחנות
עכשיו כשאתה’יש חיבור, ואתה’נקשר מחדש למסד הנתונים הנכון, אתה אמור לראות בדיוק את מה שאתה’התחלתי לעבוד עם. בכלי MySQL שלך, אחד הדברים הראשונים שעשית היה לראות אילו טבלאות היו קיימות ואז להתחיל ליצור טבלאות משלך. שם’יש עוד עבודה לעשות ביצירת שולחנות, ואתה’אני אעשה זאת קצת, עם טופס HTML חדש ותסריט חדש.
אבל לפני שתצלול לזה, אתה יכול בקלות לקבל את הסקריפט שלך לראות אילו טבלאות זמינות במסד הנתונים שלך. פתוח לְחַבֵּר.PHP שוב, והוסף את השורה הבאה:
$ תוצאה = mysql_query ("הצג טבלאות;");
?>
כאן’S פונקציה חדשה נוספת של PHP-MYSQL: mysql_query . אתה’יהפוך מאוד, מאוד מכיר את זה; זה’S המפתח להעברת SQL למסד הנתונים שלך. פונקציה זו תופסת SQL, ואתה’נתן לזה כמה SQL פשוטים באמת:
הצג שולחנות;
פקודה זו היא בְּדִיוּק כמו להקליד SQL לכלי שורת הפקודה שלך.
טיפול בשגיאות על ידי בוחן אם התוצאות שלך אינן
אבל מה עם לָמוּת ? מה לגבי טיפול בשגיאות? שם’זה אף אחד מזה, ועד עכשיו אתה יודע שצריך להיות. אבל שם’משהו שונה בקו הזה: מכל מה שחוזר מ mysql_query ממולא במשתנה שנקרא תוצאה $ .
אז זה’s באמת תוצאה $ שאתה רוצה לבחון. זה צריך להיות רשימת טבלאות, מ הצג שולחנות , או את זה’S דיווח על שגיאה מסוג כלשהו. ואם זה’S דיווח על שגיאה, אם כן תוצאה $ הוא שקר, כי mysql_ פונקציות חוזרות כוזבות כשיש’בעיה.
עם זאת, אתה יודע לבדוק ערך שווא, כך שתוכל להוסיף קוד זה לטיפול בבעיות:
אם ($ תוצאה === שקר) לָמוּת("
שגיאה בטבלאות רישום: " . mysql_error () . "
");
>
?>
עכשיו, זה עובד, אבל זה’זה לא באמת איך רוב המתכנתים ב- PHP עושים דברים. ה ==== הוא דבר לא שגרתי למדי לשימוש ב- PHP, לפחות כדי לבדוק אם משתנה הוא שקר. מה’S נפוץ יותר - וככה זה’S נעשה בדרך כלל ב- PHP - הוא להשתמש במפעיל השלילה (המכונה גם מפעיל המפץ), שהיא נקודת קריאה: ! . אז אם אתה רוצה לראות אם משתנה שנקרא $ משתנה זה שקרי, אתה יכול לומר אם (!$ משתנה) . וזה ! אומר משהו כמו, “ראה אם $ משתנה הוא שקרי.”
אפילו יותר טוב, תחשוב על ! כהיותו “לֹא.” אז מה שאתה באמת רוצה לומר בקוד שלך הוא, “אם לא תוצאה של $ , ואז למות.” בהתאם, אתה יכול לשכתב את הקוד שלך כדי להיראות כך:
אם (!תוצאה $) לָמוּת("
שגיאה בטבלאות רישום: " . mysql_error () . "
");> ?>
קוד מסוג זה הוא PHP הרבה יותר טוב, ועכשיו אתה’יש לבעיות מכוסות.
הערה
זה אולי נראה מוזר לשמוע “איך זה’זה נעשה ב- PHP.” אם הקוד עובד, זה עובד, נכון? ובכן, כן ... אבל האם שמעת אי פעם מישהו ש’פשוט לומד אנגלית מדבר? לעיתים קרובות, דבריהם נכונים, אך הסדר, השימוש והניבול טועים. נסה להסביר מדוע יותר מכבשה אחת עדיין סתם “כבשים,” ואת’יש לי את הרעיון.
שפות תכנות זהות. שם’קוד כתיבה שעובד ושם’קוד כתיבה שנראה כאילו אתה יודע את השפה. לפעמים זה נקרא להיות אָמַן הַדִבּוּר . יש למעשה כמה ספרים נהדרים עבור “מדבר כמו שצריך” ב- JavaScript ו- Ruby קראו JavaScript רהוט (Marijn Haverbeke; אין עיתונות עמילן) ו אודם רהוט (רוס אולסן; אדיסון ווסלי). זה’שווה ללמוד לא רק איך לכתוב PHP עובד, אלא לכתוב PHP שנראה טבעי.
למעשה, רק כדי לוודא שהקוד שלך עוסק בשגיאות, שנה את שאילתת SQL שלך כדי לקבל איות שגוי:
$ תוצאה = mysql_query ("טבלאות מוצגות;");
אם (!תוצאה $) < die("שגיאה בטבלאות רישום: " . mysql_error () . "
");> ?>
עכשיו טען לְחַבֵּר.html בדפדפן והפעל את מבחן החיבור שלך. איור 4-4 דומה למה שאתה צריך לראות: עדיין קצת קריפי, אך ברור מקרה שבו הקוד שלך הבין שיש בעיה וטיפל בה בהודעת שגיאה ולא עם התמוטטות מסיבית.
איור 4-4. להתמודד עם שגיאות בכל צעד בדרך. ככל שתטפל בשגיאות טובות יותר, וככל שההודעות שלך ספציפיות יותר, כך קל יותר להבין מה’זה השתבש בקוד שלך. זה אומר קוד שעובד טוב עבור המשתמשים שלך, וכי אתה יכול לתקן בקלות כאשר באגים מתגבשים.
הדפסת תוצאות SQL שלך
מטפלים בשגיאות, מדווחים על בעיות ועכשיו אתה יכול סוף סוף להתמודד עם מה’זה בעצם ב תוצאה $ כשהדברים לא’לא משתבש. למרבה הצער, הדברים קצת יותר מסובכים כאן. תוצאה $ הוא למעשה לא סוג PHP אתה’השתמשו, או אפילו כזה שאתה’אני צריך ללמוד לעבוד ישירות. זה’משהו שנקרא א מַשׁאָב , שהוא דיבור PHP עבור משתנה מיוחד’זה קשור למשהו מחוץ ל- PHP.
תחשוב על זה ככה: במקרה של mysql_query , אתה’ve ביקש את תוצאות ה- SQL מהפעלת השאילתה הצג שולחנות . אבל בעוד ש- PHP יכול לדבר עם MySQL, זה באמת לא’לא יודע לפרש את SQL. אז זה יכול’לא יודע את זה תוצאה $ צריך להחזיק רשימת שורות, שכל אחת מהן עם ערך אחד: שם טבלה. כל מה שהוא יודע זה שמשהו אחר - מסד הנתונים של MySQL שלך - הוא מקבל שאילתה דרך mysql_query פוּנקצִיָה. וחשוב על זה: תלוי באיזו שאילתה אתה עובר mysql_query, $ תוצאה עשוי להחזיק שורות עם מספר פיסות מידע, כמו שם פרטי וכתובת אתר בפייסבוק, או סתם אינדיקציה אם א צור טבלה ההצהרה עבדה או לא.
אז במקרים אלה, בדרך כלל אתה בסופו של דבר עם משאב PHP. פירושו של המשאב הזה משהו ; זה’זה בדיוק ה- PHP לא’לא באמת יודע מה זה משהו. אז ה- PHP שלך זקוק לעזרה. מה שהוא צריך זה משהו שיודע על mysql ויכול להבין איך לעבוד איתו תוצאה $ . זֶה’זה בדיוק מה שאתה מקבל עם פונקציה אחרת של MySQL, mysql_fetch_row . אתה מעביר פונקציה זו במשאב שהוחזר מ mysql_query , וזה מאפשר לך לעבור בכל שורה בתוצאות שהוחזרו משאילתת SQL שלך.
כאן’זה התבנית הבסיסית:
- כתוב את שאילתת SQL שלך, ושמור אותה במחרוזת או משתנה.
- העבירו את השאילתה שלך mysql_query ולהחזיר משאב PHP.
- העבירו את המשאב הזה mysql_fetch_row להחזרת שורות של תוצאות, אחת.
- מחזור דרך השורות הללו ושלוף את המידע הדרוש לך.
- קנה גיטרה ממש נחמדה עם כל המזומנים שאתה’ייצור מחדש.
הערה
השלב האחרון הזה הוא אופציונלי, אך מומלץ מאוד.
אתה’יש משאב ב תוצאה $ , אז עכשיו העבירו את זה ל mysql_fetch_row , ככה:
אַזהָרָה
אם שינית את ה- SQL שלך ל טבלאות מוצגות כדי לייצר שגיאה כמתואר בטיפול בשגיאות על ידי לראות אם התוצאות שלך אינן, היו בטוחים ושנו אותה בחזרה ל- SQL העובד: הצג שולחנות .
למרות ש- PHP לא’לא יודע מה לעשות עם המשאב שהוחזר mysql_query, mysql_fetch_row כן. זה לוקח את שלך תוצאה $ משאב ומתחיל לירוק שורות, אחת בכל פעם, במערך.
ואז שם’זה בזמן לולאה, שהיא גם חדשה, אך כנראה הגיונית לך כבר. א בזמן לולאה ממשיכה לולאה כל עוד משהו נכון. במקרה זה, הלולאה ממשיכה לולאה בזמן $ שורה - וזו שורת התוצאות הבאה משאילתת SQL שלך - היא מקבלת ערך מ mysql_fetch_row ($ תוצאה) . כשאין עוד שורות תוצאה, mysql_fetch_row לא’לא להחזיר משהו, אז $ שורה הוא ריק, וה- בזמן לולאה אומר, “בסדר, אני’M נעשה. אני’לא יפסיק לולאה עכשיו.”
ואת’יש לי רשימה לא מסודרת נחמדה ( ul ) מוכן לירוק כל שורה, אז שם’רק דבר אחד נותר להוסיף:
קוד זה אמור להתחיל להיראות מוכר שוב. בכל פעם mysql_fetch_row החזרות $ שורה , זה’זה ממש מחזיר מערך, משהו שאתה’יש לראות קודם (משתנה $ _request). למערך זה יש את כל פיסות המידע השונות מהשאילתת SQL שלך. ל הצג שולחנות , זֶה’רק דבר אחד, ב $ שורה [0] : שם הטבלה. די בקרוב, אתה’אני תכתוב כמה שאילתות מורכבות יותר, וייתכן שתצטרך לתפוס את הערך ב $ שורה [1] אוֹ $ שורה [2] או אפילו שורה $ [10] .
אז במקרה הזה, אתה חוזר $ שורה , אתה תופס את שם הטבלה על ידי קבלת הפריט הראשון במערך, באינדקס 0 ואז אתה מדפיס את זה עם הֵד . שם’S רק קמט אחד אחר כאן: אותם פלטות מתולתלות בתוך המיתר עברו להדהד. מה’זה עם אלה?
ובכן, אתה יכול לשכתב את השורה הזו ככה:
שום דבר לא בסדר שם, למעט כל סימני הציטוט הנוספים והתקופה כדי להדביק מיתרים יחד.
הערה
נקודות חנון עיקריות אם נזכרת ש- Mashsing Strings יחד נקראה שרשור (שילוב טקסט).
אבל PHP די מנוסה, וגם האנשים שכתבו את השפה הם מתכנתים. הם הבינו, כמוך, שאתה’כל הזמן כל הזמן להוריד משתנים לאמצע המיתרים. אז במקום לסיים כל הזמן מחרוזת ולהוסיף משתנה, אתה יכול פשוט לעטוף משתנה בפנים של < >, ו- PHP ידפיס את הערך של המשתנה הזה במקום “$ שורה [0]”. זה גורם לקוד הרבה יותר פשוט, וזה’זה דבר טוב.
להציל לְחַבֵּר.PHP , לבקר מחדש לְחַבֵּר.html בדפדפן שלך, ולראות אילו טבלים אתה’יש במאגר המידע שלך. איור 4-5 הוא לְחַבֵּר.PHP פועל נגד מסד נתונים עם הרבה שולחנות. יכול להיות שיש לך פשוט אחד או שניים וזה’זה בסדר. רק וודא שאתה רואה רשימה של השולחנות שלך.
איור 4-5. הצג שולחנות מתברר שהם די חסרי תועלת בדפדפן די מהר. תוצאה זו עשויה להיראות כמו מספר עצום של שולחנות, אבל אתה’סביר להניח שיכתוב יישומי אינטרנט שיש להם 20, 30 או אפילו 100 טבלאות באפליקציה יחידה. אולם לעת עתה, זה’דרך ממש קלה לוודא שהסקריפטים שלך ב- PHP מדברים עם מסדי הנתונים של MySQL שלך.
ניקוי הקוד שלך עם מספר קבצים
גם אם אתה לא’עדיין לא מבין את זה, שם’זה משהו בעייתי לגבי שלך לְחַבֵּר.PHP תַסרִיט. התבונן בשיחות הראשונות של MySQL שאתה מבצע:
mysql_connect ("שלך.מאגר מידע.מנחה",
"שם השם שלך", "המילה שלך")
או למות("שגיאה בחיבור למסד נתונים: " . mysql_error () . "
"); הד"
מחובר ל- MySQL!
";
MySQL_SELECT_DB ("שם ה- DATABASE-NAME")
או למות("שגיאה בבחירת מסד הנתונים BMCLAUGH: " . mysql_error () . "
"); הד"
מחובר ל- MySQL, באמצעות מסד נתונים BMCLAUGH.
"; // וכולי. ?>
אתה’מחדש באופן ידני הקלדת מארח מסד הנתונים שלך, את שם המשתמש שלך, את הסיסמה שלך ואת שם מסד הנתונים שלך לתסריט שלך. עכשיו נניח שיש לך 10 סקריפטים ואתה’מקליד את זה 10 פעמים. הסיכוי להקלדה הוא די גבוה.
לא רק זה, מה קורה כשאתה משנה את הסיסמה שלך? או שתשדרג לתוכנית אירוח טובה יותר שתטפל בכל התעבורה באינטרנט שהאפליקציות שלך מייצרות, ואתה צריך לשנות את מארח מסד הנתונים שלך? אתה’צריך לאתר את כל מקום שאתה שם את המידע הזה, בכל סקריפט PHP. זֶה’זה סיוט, ומונע ממך למעשה לכתוב קוד חדש ולהרוויח יותר מזומנים. לא טוב.
אתה צריך דרך תקציר החוצה פיסות המידע האלה. הפשטה היא מונח תכנות שמשמעותו הסתרת היישום, האופן בו משהו (כמו סיסמא) עובד, מהתוכניות שמשתמשות בו. בעיקרון יש לך סמל, או שם, ושם זה מתייחס למשהו אחר עם הרבה יותר פירוט. וגם אם הפרט הזה ישתנה, השם עדיין מצביע על הדבר הנכון.
זה’כמו לומר “ליי,” ומשמעותו אשתי, מבלי שאצטרך לומר, “אותה אישה חמה בת 34 עם שיער בלונדיני קצר ורגליים נהדרות.” והיופי של “ליי” האם בכל יום הולדת אתה יכול להמשיך לומר, “ליי,” במקום לשנות את התיאור שלך.
החלפת ערכים שהוחלפו ביד במשתנים
אז נניח שאתה רוצה שהקוד שלך ייראה יותר כך (בעצם, אתה באמת לַעֲשׂוֹת רוצה שזה ייראה יותר כך):
mysql_connect ($ database_host, $ שם משתמש, $ סיסמא)
או למות("שגיאה בחיבור למסד נתונים: " . mysql_error () . "
"); הד"
מחובר ל- MySQL!
";
mysql_select_db ($ database_name)
או למות("שגיאה בבחירת מסד הנתונים BMCLAUGH: " . mysql_error () . "
"); הד"
מחובר ל- MySQL, באמצעות מסד נתונים BMCLAUGH.
"; // וכולי. ?>
כלכם’RE DOWES זה לכתוב משהו שנראה קצת כמו משתנה במקום הקלדת ידיים של שם המשתמש או את שם מסד הנתונים. עכשיו אתה יכול להגדיר את המשתנים האלה מעל קוד החיבור שלך:
$ database_host = "שלך.מאגר מידע.מנחה";
$ username = "שם המשתמש שלך";
$ סיסמא = "password שלך";
$ database_name = "database-name";
// קוד חיבור מסד נתונים ?>
אבל האם זה באמת הרבה יותר טוב? עדיין לא; אתה’עדיין יש לו את אותם הערכים שנקבעו ביד לתסריט שלך. אתה רוצה להדביק את הערכים בקובץ כך שאף אדם לא צריך להקליד אותם. תמשיך לקרוא.
הפשטת ערכים חשובים לקובץ נפרד
המטרה שלך היא להוציא את הערכים האלה לְחַבֵּר.PHP , למקום כלשהו שכל סקריפטים שלך ב- PHP יכולים לגשת אליהם ללא הקלדה ממך. פתח קובץ חדש וקרא לו app_config.PHP . עכשיו זרוק את המשתנים שלך לקובץ חדש זה:
הערה
היה בטוח ושמור app_config.PHP איפשהו הגיוני לכל היישום שלך’S סקריפטים כדי לגשת אליו. בספר הזה’דוגמאות, app_config.PHP נמצא בשורש האתר, מתחת סקריפטים/ . אז אם אתה’מחדש ב CH04/סקריפטים/ ספרייה, אתה’D גש לקובץ זה בטלפון ../ /../סקריפטים/app_config.PHP , אוֹ [site_root]/סקריפטים/app_config.PHP . אתה יכול לשמור את הקובץ בכל מקום שאתה רוצה, כל עוד אתה מקבל את הנתיב בתסריטים שלך ב- PHP המתייחסים אליו.
כשאתה עובר לגרסת ייצור של היישום שלך, סביר להניח שאתה רוצה למקם קובץ זה מחוץ לשורש האתר. ככה, משתמשי אינטרנט יכולים’פשוט הקלד את הנתיב לתסריט התצורה שלך וקבל את כל הסיסמאות שלך. לחלופין, אתה יכול להוסיף אבטחה לספרייה זו, אם כי פשוט להוציא אותו מהספריות המשרתת את האינטרנט זה בדרך כלל הקל ביותר.
עכשיו, אתה יכול לקבל את כל סקריפטים השונים שלך ב- PHP ישתמשו במשתנים המשותפים הללו. שנה משתנה כאן ב app_config.PHP , ושינוי זה משפיע על כל סקריפטים של PHP המשתמשים במשתנים משותפים אלה.
אבל איך אתה באמת ניגש למשתנים האלה? חזור אל לְחַבֵּר.PHP , והסר היכן הגדרת את המשתנים האלה בעצמך. אם אתה מנסה לגשת לְחַבֵּר.PHP דרך לְחַבֵּר.html אבל עכשיו אתה’אני מקבל שגיאה מגעילה, כפי שמוצג בראו איור 4-6.
איור 4-6. הגדרת את המשתנים שלך ב- app_config. PHP, אבל התחבר.PHP לא’לא יודע זאת. אתה צריך לומר לתסריט החיבור שלך שזה לא צריך’t הפעל עד שהוא טוען app_config.PHP. ואז הדברים יתנהגו, כי המשתנים מתחברים.שימושים ב- PHP יוגדרו כראוי.
השגיאה מתרחשת בגלל לְחַבֵּר.PHP עכשיו אין מושג מה שם משתמש $ אוֹ סיסמא $ מתייחס ל. אתה צריך להודיע ל- PHP שלפני שהוא מנסה לעשות משהו לְחַבֵּר.PHP , זה’S נדרש לטעון app_config.PHP . וזה’s (כמעט) בדיוק מה אתה מקליד בתסריט שלך:
לדרוש '../ /../סקריפטים/app_config.php ';
// קוד חיבור מסד נתונים ?>
כעת, PHP טוען את הקובץ ../ /../סקריפטים/app_config.PHP לפני זה מפעיל את שלך mysql_connect פוּנקצִיָה. לְמַעֲשֶׂה, לִדרוֹשׁ אומר, “היי PHP, אם אתה יכול’לא טען את הקובץ i’אני נותן, ואז זורק שגיאה מגעילה, כי שום דבר אחר לא יעבוד.”
אַזהָרָה
וודא שהנתיב ושם הקובץ שאתה נותן לִדרוֹשׁ התאמות איפה שאתה באמת מציב app_config.PHP , או אתה’תראה את השגיאה ש לִדרוֹשׁ מייצר מקרוב ואישי.
נסה להפעיל שוב את סקריפט החיבור שלך, ועליך לראות את רישום הטבלה שלך, מה שאומר שהדברים עובדים טוב שוב.
מתחת למכסה המנוע: דרוש או לכלול?
שם’פקודה נוספת ב- PHP זו’זה מאוד דומה ל לִדרוֹשׁ : לִכלוֹל. לִכלוֹל עושה בדיוק מה לִדרוֹשׁ עושה מבחינת לומר ל- PHP לטעון קובץ אחר. ההבדל הוא שאם הקובץ הזה יכול’לא להיות טעון, לִכלוֹל פשוט מנפיק אזהרה ומאפשר ל- PHP להמשיך להריץ את הפקודות המאוחרות יותר בתסריט שלך. במילים אחרות, לִדרוֹשׁ לגמרי מכבה את הדברים, אבל לִכלוֹל מאפשר לתסריט שלך להמשיך.
אבל כאן’זה העניין. האם אתה בֶּאֱמֶת הולך לטרוח לכלול קובץ אם אתה לא’לא צריך את הקובץ הזה? ברוב המקרים, כנראה שלא. ואת’מחדש כולל את הקובץ הזה כי אתה זקוק לו; אתה לִדרוֹשׁ הקובץ הזה לרוץ. אז כמעט בכל סיטואציה, עליכם להשתמש לִדרוֹשׁ לתפוס קובץ אחר, לא לִכלוֹל . אם משהו משתבש, אתה רוצה לדעת על זה. אתה לא דון’זה לא רוצה ששאר הקוד שלך פועל, כי זה’ככל הנראה פשוט הולך לטעות בכל מקרה.
משתנים משתנים, אך קבועים נשארים קבועים
שם’זה רק בעיה קטנה אחת ומציקה עם הקוד שלך: אתה’עדיין משתמשים במשתנים לשם המשתמש והסיסמה שלך, יחד עם מארח מסד הנתונים ושם מסד הנתונים. ומה’s משתנה? משהו שמשתנה או משתנה. בהתאם לכך, PHP מאפשר לך בשמחה לכתוב את הקוד הבא לְחַבֵּר.PHP :
mysql_connect ($ database_host, $ שם משתמש, $ סיסמא) או למות ("שגיאה בחיבור למסד נתונים: " . mysql_error () . "
"); // זה מותר, אבל כמה mojo $ bard סיסמא =" hijinks ";
אז מה קורה כאשר תסריט אחר - מה שדורש גם app_config.PHP —שכבות להתחבר mysql_connect ? זה’זה הולך להשתמש סיסמא $ , אבל עכשיו סיסמא $ isn’לא נכון יותר. זה’s מוגדר ל “חזיקים,” ותוהו ובוהו יתפתח.
מה שאתה באמת רוצה זה לערכים האלה ב app_config.PHP להיות קבוע ולעולם לא ישתנה. אתה יכול לעשות זאת עם המיוחד לְהַגדִיר פוּנקצִיָה. פתוח app_config.PHP ושנה את הקוד שלך:
הגדירו ("מסד נתונים_הוסט", "שלך.מאגר מידע.מנחה");
הגדר ("Database_username", "שם המשתמש שלך");
הגדר ("Database_Password", "המילה שלך");
הגדר ("Database_name", "שם ה- Database שלך");
?>
אתה מגדיר את שמו של קבוע והערך עבור אותו קבוע, ו- PHP יוצר קבוע חדש. ככה, אתה יכול להקליד Database_host לקוד שלך, ו- PHP בֶּאֱמֶת רואה “שֶׁלְךָ.מאגר מידע.מנחה”. מושלם! ומכיוון שזה קבוע, זה יכול’לא ישתנה בכל מקום לאורך הקו.
קבועים מוקלדים באותיות של כל מעלות. כובעים אינם’לא נדרש, אבל זה’זה עוד אחד כזה “דבר כמו מתכנת PHP” דברים. אתה רוצה קבועים שייראו שונה ממשתנים, ושימוש בכל שמות האסיפה הגדולה היא דרך אחת לעשות זאת. קבועים גם הם לא’לא יהיה $ לפני שמם, שזו דרך נוספת להבדיל קבוע למשתנה.
עכשיו אתה צריך לבצע כמה שינויים מהירים לְחַבֵּר.PHP להשתמש בשמות חדשים מהוונים של קבועים:
mysql_connect (Database_Host, Database_username, Database_Password)
או למות("שגיאה בחיבור למסד נתונים: " . mysql_error () . "
"); הד"
מחובר ל- MySQL!
";
mysql_select_db (database_name)
או למות("שגיאה בבחירת מסד הנתונים "
. שם בסיס הנתונים .
mysql_error () . "");
הד "
מחובר ל- MySQL באמצעות מסד נתונים " . שם בסיס הנתונים . "
"; // סר. ?>
אַזהָרָה
אתה יכול’לא להשתמש ב- בתוך הצעות המחיר שלך להדפיס קבועים. זה’s רק כשאתה מקיף משתנה (שמתחיל בו $ ) עם ש- PHP מדפיס את הערך של המשתנה הזה. במקום זאת, השתמש בגישת שרשור המחרוזת הרגילה בה אתה מסיים את המחרוזת שלך והוסף את הקבועים באמצעות הנקודה (.), כפי שנדון בשילוב טקסט.
לְנַסוֹת לְחַבֵּר.PHP שוב. אתה צריך לקבל רשימה טובה לחלוטין של שמות שולחן. אבל הפעם, אתה’יש לקבועים למידע החשוב שלך, שנחטף בבטחה בקובץ המופרד לְחַבֵּר.PHP .
הערה
זה’זה גם רעיון טוב להוסיף קצת אבטחה נוספת app_config.PHP , וכל סקריפטים אחרים המכילים ערכים מיוחדים כמו סיסמאות. אתה יכול להגדיר את ההרשאות בקובץ להיות מגבילות יותר, או להעביר את הקובץ למקום כלשהו של ה- PHP שלך יכול לגשת, אך משתמשי האינטרנט שלך יכולים’t. בקש עזרה במנהל האינטרנט או השרת שלך אם אתה’לא בטוח איך לעשות זאת.
זמן עיצוב: התחל קטן, הוסף קטן, גימור קטן
יתכן שאתה תוהה למה אתה לא יכול’זה בדיוק התחלתי עם app_config.PHP , והגרסה שהושלמה והעבודה של לְחַבֵּר.PHP . או, לכל הפחות, היית יכול פשוט להפיל את כל קוד החיבור למסד הנתונים לְחַבֵּר.PHP בבת אחת ואז עשית את קוד ההדפסה בבת אחת. Isn’זה איך מפתחים אמיתיים כותבים קוד?
ובכן, כן ולא. הרבה מפתחים אכן כותבים קוד כזה. הם מקלידים 10 או 20 שורות קוד לתסריט שלהם ואז מנסים זאת. המון דברים ישברו, מכיוון שמפתחים סוגים מהר מדי ויעשו טעויות. אבל אז הם’לתקן כל בעיה, אחת אחת. ועבור המון מפתחים, זה’זה בסדר גמור.
אבל כאן’הדבר: זה’לא דרך יעילה מאוד לעבוד. נוסף על כך, אתה’בדרך כלל מתמקד בשלב האחרון (כמו להדפיס את השולחנות), ולכן יתכן שלא תבלה זמן רב כדי להבין את הדרך הטובה ביותר להתמודד עם הצעדים בין הבין. יתכן שלא תשתמש כדי לפשט את ההצהרה שמדפיס $ שורה [0] , או שאתה עלול לדלג על א לָמוּת בגלל שאתה’חושב מחדש על פלט HTML, לא לטפל במקרה בו סיסמת מסד הנתונים ISN’לא נכון.
המפתחים הטובים ביותר עובדים על נתחי קוד ממש קטנים בכל פעם. הם בוחנים את הקוד הזה ואז הם עוברים למשהו אחר. למעשה - וזה קצת מעבר לספר הזה, אבל הוא’S עדיין חשוב - הרבה מפתחי עילית באמת כותבים מבחנים לפני הם כותבים כל דבר אחר. הם כותבים את המבחנים האלה, והבדיקות כמובן נכשלות, מכיוון שהם מקדמים’T כתב כל קוד. ואז הם כותבים מספיק קוד כדי לעבור את המבחן שלהם ואז הם כותבים מבחן נוסף.
שיטה זו אולי לא הגיונית בהתחלה. מדוע לכתוב בדיקות לקוד שאינן’לא קיים? כאן’s מה’S באמת אגוזים: לעיתים קרובות, גישה זו מביאה לקוד בדיקה רב יותר מאשר קוד יישום בפועל! זה’הרבה עבודה וזה’הכל על סמך הרעיון שעליך לכתוב מספיק קוד כדי לגרום לזה דבר אחד לעבוד בכל פעם.
אבל כאן’החשיפה הגדולה, ומדוע מפתחי העילית הללו הם עלית: גישה ראשונה זו מביאה לקוד טוב יותר. עובד קטן, מההתחלה ועד הסוף, פירושו שאתה’התמקד מחדש בדבר אחד, ועושה את הדבר האחד ממש טוב. אתה’אני ממשיך למשהו אחר. וזה אומר מה שאתה’מחדש לעבוד עליו הוא סולידי ועובד. גישה זו אכן לוקח יותר זמן בהתחלה, אך היא גורמת לקוד סולידי סלע שנשבר הרבה פחות.
אז קח את הזמן שלך ועבד קטן. הקוד שלך יהיה טוב יותר, והלקוחות שלך יאהבו אותך כי הקוד שלך עדיין פועל בזמן שהם’re בטלפון מנסה לקבל עזרה באפליקציה שבורה מ “הבחורים האחרים.”
בניית רץ שאילתת SQL בסיסי
עכשיו שתוכל להתחבר ל- SQL, אתה’מוכן לקחת על עצמו משהו יותר שאפתני: בניית גרסה משלך לכלי שורת הפקודה MySQL. ברור שאתה’מחדש “שורת פקודה” ולהחליף אותו “מבוסס רשת.”
מסתבר שאתה’יש כבר את רוב הכלים הדרושים לך. אתה יכול לבנות בקלות טופס HTML המאפשר לך ולמשתמשים שלך להזין שאילתת SQL, אתה יודע להתחבר ל- MySQL ולבחור מסד נתונים ותוכל להריץ שאילתה. כל מה ש’השמאל הוא להבין כיצד לפרש את המשאב של PHP זה mysql_query חוזר כשזה’אין רשימה של שמות טבלה.
יצירת טופס HTML עם קופסה ריקה גדולה
לפני שמגיעים mysql_query עם זאת, ותוצאותיה מתחילות במה שאתה יודע: טופס HTML. שמור על דברים פשוטים לעת עתה, ופשוט צור טופס עם אזור טקסט יחיד אליו תוכלו להקליד שאילתות, וכמה כפתורים בסיסיים.
פתח את עורך הטקסט שלך, וצור Queryrunner.html:
PHP & MySQL: המדריך החסר
דוגמא 4-2רץ שאילתת SQL
הזן את שאילתת SQL שלך בתיבה למטה:
הפלג.
איור 4-7. מי שאמר אי פעם שלא תעשה זאת’לא הקדיש זמן רב לכתיבת HTML ו- CSS כשהפכת למתכנת אינטרנט מן המניין? אפילו עם רץ שאילתת SQL בסיסי, מבנה וסגנון טוב עושים הבדל עצום במצגת וכמה קל הקוד שלך לעדכן.
חיבור למסד הנתונים שלך (שוב)
אתה יודע מה’S הבא: אתה צריך להתחבר ל- MySQL ואז להשתמש בסיס הנתונים שלך. קוד זה צריך להיות די מוכר עד עכשיו; פתוח run_query.PHP וללכת לעבודה:
שגיאה בחיבור למסד נתונים: " . mysql_error () . ""); הד"מחובר ל- MySQL!
"; mysql_select_db (Database_name) או למות ("
שגיאה בבחירת מסד הנתונים " . שם בסיס הנתונים . mysql_error () . "
"); הד"
מחובר ל- MySQL באמצעות מסד נתונים " . שם בסיס הנתונים . "
"; ?>
אבל רגע ... זה הוא מוּכָּר. אתה’ve כתב את הקוד הזה לפני, בחזרה לבחור את בסיס הנתונים לשימוש, ולמעשה אתה צריך לכתוב אותו בכל פעם שאתה מתחבר ל- MySQL. סוג כזה של כפילות הוא’לא טוב. זֶה’הסיבה שהעברת את קבועי מסד הנתונים שלך app_config.PHP : רצית להיות מסוגל לשמור על קוד שהוא תמיד זהה במקום יחיד, ולא עשרה או מאה מקומות.
אתה’ראיתי כמה קל לִדרוֹשׁ קובץ (מופשט ערכים חשובים לקובץ נפרד), ומשוך כמה ערכים קבועים. אתה יכול לעשות את אותו הדבר עם קוד חיבור מסד הנתונים שלך. פתח קובץ חדש וקרא לו Database_Connection.PHP . שמור את התסריט החדש הזה ממש לצד app_config.PHP , והקלד את הקוד הבא:
שגיאה בחיבור למסד נתונים: " . mysql_error () . ""); הד"מחובר ל- MySQL!
"; mysql_select_db (Database_name) או למות ("
שגיאה בבחירת מסד הנתונים " . שם בסיס הנתונים . mysql_error () . "
"); הד"
מחובר ל- MySQL באמצעות מסד נתונים " . שם בסיס הנתונים . ".
"; ?>
הערה
וודא שהדרך שלך ל app_config.PHP תואם את היכן שמרת את הקובץ הזה. אם אתה’חוסך מחדש Data-Base_Connection.PHP באותה מדריך כמו app_config.PHP , אתה רק צריך את שם הקובץ, ללא נתיבי ספרייה.
עכשיו אתה’יש לך את כל קוד מסד הנתונים שלך שנחשב יפה, מה שאומר שאתה יכול לשפץ באופן קיצוני run_query.PHP :
אֵיך’זה עבור קוד קצר? שימו לב גם כי אין לכם עוד סיבה לדרוש app_config.PHP . התסריט שלך דורש Database_Connection.PHP , וזה’ג Data-Base_Connection.PHP שמטפל בהכנסת app_config.PHP . הקוד שלך הרבה יותר נחמד ומסודר עכשיו.
רק כדי לוודא שזה עובד, עליך לבקר שלך Queryrunner.html דף ולחץ על הפעלת שאילתה. אתה צריך לקבל משהו כמו איור 4-8-הכל בלי שום דבר מלבד סינגל לִדרוֹשׁ בתסריט הראשי שלך!
איור 4-8. זה אולי נראה מוזר לכתוב תסריט ש (לפחות עד כה) לא עושה יותר מאשר לדרוש תסריט אחר. למעשה, ככל שאתה מקבל קידוד נוח יותר, כך אתה יותר’להעדיף שימוש חוזר מסוג זה. אתה רוצה לכתוב מספיק קוד חדש כדי לבצע את העבודה. אם אתה יכול לעשות שימוש חוזר במאה, או 1,000, שורות קוד קיים, אתה צריך.
הפעלת המשתמש שלך’S SQL שאילתה (שוב)
בשלב זה, סוף סוף אתה צריך לשלב את מה שאתה יודע על PHP ועל מה שאתה יודע על SQL. יש לך כבר משהו שהמשתמש מכניס לאזור הטקסט הגדול בטופס שלך דרך בקשת $ משתנה, שכפי שאתה זוכר הוא מערך (משתנה $ _request). ואתה יכול גם להשתמש mysql_query להריץ שאילתה.
אתה רק צריך להרכיב את שני הדברים האלה:
פשוט תפוס את השדה המתאים מהקלט מטופס HTML שלך, העביר אותו ל mysql_query , ואת’טוב ללכת. לאחר מכן תוכל להעביר את משאב ה- PHP המוחזר, תוצאה $ , לטיפול בשגיאות אם הצהרה, ולבסוף ל mysql_fetch_row להדפיס את התוצאות מהשאילתה.
שאלה נפוצה: מדוע לא להפסיק את פונקציית MySQL_Query?
יתכן ששמת לב שכשאתה מתחבר כל הזמן ל- MySQL - עם אותו שם משתמש וסיסמא, שוב ושוב - ובחירת בסיס נתונים - לעתים קרובות אותו בסיס נתונים, שוב ושוב - אתה’אני אהיה מתקשר mysql_query , שוב ושוב ושוב. אז למה לא למקם את זה בקובץ אחר, ולדרוש את הקובץ הזה?
הסיבה היא שם בקוד שכתבת על הפעלת המשתמש שלך’שאילתת SQL (שוב): למה אתה עובר mysql_query הולך להשתנות כמעט בכל פעם שאתה קורא לזה. לדוגמה, ב לְחַבֵּר.PHP (חיבור למסד נתונים של MySQL), עברת את השאילתה הצג שולחנות לזה; עכשיו אתה’מחדש את זה שאילתה משדה הטופס ב Queryrunner.html. למרות שאתה’מחדש להתקשר mysql_query שוב ושוב, מה אתה’מתן פונקציה זו משתנה, כך שהיא’זה לא יעזור לך לשלוף את הפונקציה הזו מהסקריפטים העיקריים שלך.
אתה יכול לזוז mysql_query מתוך התסריט הראשי שלך והעביר אליו את החלק של ההצהרה שממשיכה להשתנות - שאילתת SQL. אתה’D צריך ליצור פונקציה מותאמת אישית שלוקחת את השאילתה שלך מהתסריט הראשי שלך והידיים שאילתה אליהן mysql_query . אז מתי mysql_query פונקציה המותאמת אישית, תצטרך להחזיר כל דבר שהוא חזר לתסריט הראשי שלך.
זה אולי נשמע כמו פה מלא, והרבה עבודה. זה’אבל באמת די קל, וברגע שתתחיל לכתוב פונקציות משלך - משהו’יהיה לך בפרק 8 - אתה’אין שום בעיה לעשות את זה. אבל מה היית מרוויח? אתה’D עדיין צריך לעבור בשאילתה ולהחזיר תגובה. אתה’D לא ממש להשיג שום דבר מבניית פונקציה משלך; בעיקרון זה יחליף mysql_query , אבל אתה לא’לא לקבל כל פונקציונליות נוספת וזה לא היה’t הוסף כל הגנה מפני שינויים או משהו כזה לקוד שלך.
עכשיו, לפני שאתה הולך לחשוב שאתה לא צריך’לא לדאוג לסוג כזה, קח רגע. חושב, “האם אוכל לשלוף את הקוד הזה לקובץ כללי אחר? האם עלי להפוך את זה לפונקציה מותאמת אישית?” זה דבר טוב מאוד! אתה רוצה לחשוב ככה, גם אם תחליט - כפי שקורה כאן - זה’ג לֹא דבר טוב. ככל שתסתובב רעיונות ודרכים חדשות לגשת לקוד שלך, כך מתכנת טוב יותר אותך טוב יותר’אני אהיה. אז המשך לשאול את עצמך את השאלות האלה; פשוט דון’לא פחד לענות על שאלות משלך עם א, “לא זה’זה לא רעיון כל כך נהדר ב זֶה מקרה.”
התסריט נראה די טוב, אז עכשיו אתה’מוכן באמת לנסות את הדברים.
נכנסת לשאילתה הראשונה שלך מבוססת אינטרנט
אתה בטח לא תום’יש הרבה במאגר המידע שלך בשלב זה, אז התחל ביצירת טבלה חדשה בשם כתובות אתרים . כאן’זה sql you’צורך:
צור כתובות כתובות טבלה (id int, url varchar (100), תיאור varchar (100));
כמובן, מאז שאתה’יש לי אזור טקסט גדול ונחמד, אתה יכול גם להפיץ את זה:
צור כתובות כתובות טבלה (Id int, url varchar (100), תיאור varchar (100))
כך או כך, אתה רוצה טופס שנראה כמו איור 4-9.
איור 4-9. השימוש ב- TextArea כאן מאפשר למשתמשים שלך להיכנס ל- SQL עם זאת הם אוהבים. זה’זה דבר קטן, אבל קטעי הגמישות הקטנים האלה והעיצוב הממוקד של המשתמש הופכים את טפסי האינטרנט שלך להרבה יותר מהנים לשימוש. לא היית’לא רוצה לכתוב הצהרת SQL ארוכה גדולה בתיבת קלט ענקית בשורה אחת, אז מדוע המשתמשים שלך?
עכשיו לחץ על הפעל שאילתה. מה קיבלת? ובכן אתה’ככל הנראה בוהה במסך מפתיע, כמו זה שמוצג באיור 4-10.
איור 4-10. לפעמים הודעת השגיאה הגרועה ביותר האפשרית אינה הודעת שגיאה. שום דבר כאן לא עוזר לך לראות מה השתבש עם התסריט שלך. במקרים כאלה, הודעת שגיאה תעזור, לא לגרום לתסכול.
ובכן, מה קרה? אם אתה רוצה להתבלבל באמת, לחץ על כפתור הגב בדפדפן שלך והפעל את לִיצוֹר שאילתה שוב. אתה’אראה הודעה כמו זו המוצגת באיור 4-11.
איור 4-11. ראשית, לא היה לך כלום, ועכשיו שגיאה. מה’זה קורה? חמור מכך, למרות שאתה יודע שיש לך שגיאה, מה הבעיה בפועל? שם’עדיין הרבה עבודה לעשות כאן.
בפעם הראשונה שניהלת את צור טבלה שאילתה ביצירת שולחנות עם Create, אין לך כלום - לא תוצאות בכלל. בפעם הבאה, MySQL אומר לך את כתובות אתרים טבלה כבר קיימת! למעשה, אם אתה מקפץ לכלי שורת הפקודה שלך, אתה רואה את זה, כן, את הטבלה כן קיימים במאגר המידע שלך:
mysql> תאר כתובות אתרים; +-------------+--------------+------+-----+---------+-------+| שדה | סוג | Null | מפתח | ברירת מחדל | תוספת | +-------------+--------------+------+-----+---------+-------+| id | int (11) | כן | | Null | | | URL | Varchar (100) | כן | | Null | | | תיאור | Varchar (100) | כן | | Null | | +---------------+--------------+------+-----+----------+-------+3 שורות בסט (0.00 שניות)
התבונן היטב בקוד שלך שוב:
ה אם (!תוצאה $) בלוק הקוד לא פועל, כל כך ברור תוצאה $ חזר כמשהו אחר מאשר שקר. אבל ה בזמן לולאה מעולם לא רצה; מעולם לא ראית תוצאות.
אבל חכה שנייה. השאילתה שלך הייתה א לִיצוֹר שאילתא. אילו שורות יוחזרו מהסוג הזה של שאילתה? לא היה’לא תהיה שורות, כי היית’לא מבקש שורות. פשוט ביקשת מ- MySQL ליצור טבלה; למעשה, מקום לָשִׂים שורות.
טיפול בשאלות שדון’T בחר מידע
הסוד כאן הוא זה mysql_query שמח לקחת א לִיצוֹר הַצהָרָה. זה אפילו עושה את מה ששאלת, וזו הסיבה שבפעם השנייה שנכנסת לשאילתה ההיא, MySQL נתנה לך שגיאה ואמרה כי כתובות אתרים הטבלה כבר נוצרה. מתי mysql_query מקבל הצהרת יצירה, היא חוזרת שֶׁקֶר אם הייתה שגיאה - אשר ידיות התסריט שלך - אך נכונה אם יש’אין שגיאה. ואם שם’אין שגיאה, זה לא’לא להחזיר שורות . אתה מקבל א נָכוֹן ערך ב תוצאה $ , אבל שום דבר אחר. וזה’איפה שהדברים השתבשו.
מתי mysql_query מקבל את מרבית הצהרות ה- SQL שלא’T בחר נתונים, כמו ליצור, הכנס, עדכן, מחק, ירידה וכמה אחרים, זה פשוט חוזר נָכוֹן (אם הדברים עבדו) או שֶׁקֶר (אם הם לא’t).
הערה
כמה מאותן פקודות SQL, כמו עדכון וכן לִמְחוֹק , עשוי להיראות חדש עבורך. דוֹן’אבל לא לדאוג. הם עושים בדיוק איך שהם נראים: עדכון מעדכן מידע בטבלה, ו לִמְחוֹק מסיר את זה. וכשאתה צריך להשתמש בפונקציות האלה בספר זה, אתה’לקבל הרבה יותר פירוט על איך להשתמש בכל אחד מהם.
למרבה המזל, עכשיו כשאתה יודע מה’זה קורה, זה’זה לא קשה מדי להתמודד עם הבעיה. אתה רק צריך את הסקריפט שלך כדי לגלות אם מחרוזת שאילתת SQL של המשתמש שסיפקה יש אחת מהמילים המיוחדות הללו. אם כן, עליך להתמודד עם זה אחרת. וזה פשוט קורה לך’הרבה נוח עם חיפוש במיתרים.
אז תחשוב את זה דרך; מה שאתה באמת רוצה זה משהו כזה:
- תפוס את המשתמש’שאילתה מצורת HTML.
- להעביר את השאילתה לתוכו mysql_query , ולאחסן את התוצאה במשתנה.
- קבע אם התוצאה שקרית, וזה רע לא משנה באיזה סוג SQL עבר.
- אם התוצאה אינה שקרית, בדוק אם לשאילתה יש אחת ממילות המפתח המיוחדות בה: צור, הכנס, עדכן, מחק או ירידה. (יש אחרים, אבל אלה הנפוצים ביותר לבדוק.)
- אם לשאילתה יש אחת מהמילים המיוחדות הללו, בדוק אם התוצאה של הפעלת השאילתה הייתה נכונה, ותן למשתמש לדעת שהדברים עברו טוב.
- אם לשאילתה אין אחת מהמילים הללו, נסה להדפיס את שורות התוצאה כמוך’יש כבר.
אתה’יש כבר הרבה מהקוד הזה, אז אתה צריך להוסיף רק אם (או אולי כמה אם S, למעשה), וחלקם חיפושים:
$ return_rows = שקר; $ מיקום = strpos ($ Query_Text, "Create"); אם ($ מיקום === False) < $location = strpos($query_text, "INSERT"); if ($location === false) < $location = strpos($query_text, "UPDATE"); if ($location === false) < $location = strpos($query_text, "DELETE"); if ($location === false) < $location = strpos($query_text, "DROP"); if ($location === false) < // If we got here, it's not a CREATE, INSERT, UPDATE, // DELETE, or DROP query. It should return rows. $return_rows = true; >>>>>
אַזהָרָה
הקפד להשתמש בשלט המשולש-שוואות הזה ( ==== ) שלך אם הצהרות כדי לבדוק אם מיקום $ הוא שֶׁקֶר .
קוד זה אולי נראה מסובך, אבל הוא’S פשוט אם אתה עובר דרך קו אחר שורה. בעיקרון, יש לך את אותו הדבר אם הצהרה, חוזרת שוב ושוב, כאשר כל אחד מאלו מקונן אחר אם הַצהָרָה:
$ מיקום = strpos ($ Query_Text, "Search_String"); אם ($ מיקום === False) < // Try again with another SEARCH_STRING >
לבסוף, אם כל אם הצהרות נכשלות, ואז אתה לא’יש צור, הכנס, עדכן, מחק , אוֹ יְרִידָה בכל מקום במחרוזת השאילתה:
// זו ההצהרה הפנימית ביותר אם ($ מיקום === False) < // If we got here, it's not a CREATE, INSERT, UPDATE, // DELETE, or DROP query. It should return rows. $return_rows = true; >
אבל למה זה כל כך מורכב? הבעיה כאן היא שאתה באמת רוצה לחפש במשתמש’S Query String, לא רק למילה תואמת אחת, כמו לִיצוֹר אוֹ לְהַכנִיס , אבל למספר מילים תואמות. זֶה’זה קצת מסובך, אז אתה’יש לעבוד עם שיחה אחת Strpos בכל פעם.
הערה
וודא שאתה מבין את הקוד הזה, אבל אל תעשה’לא התחבר לזה מדי. זה’זה ממש מכוער, ובפרק הבא, אתה’אחזור להוסיף כלי חדש במיוחד לערכת התכנות שלך ב- PHP, ולעבד מחדש את הקוד הזה כדי להיות מִגרָשׁ רזה ומלא יותר.
בכל שלב, אם נמצא מחרוזת החיפוש, המשתמש הכניס את אחת מאותן מילות מפתח SQL המיוחדות שלא’T החזיר שורות, כך שהמשתנה $ return_rows נקבע ל שֶׁקֶר , שונה מערכו המקורי, נָכוֹן .
לבסוף, בסוף פסט האהבה המתולתל הזה, ה אם הצהרות נרגעות בחזרה לתוכנית הראשית, ואף אחת מהן $ Returns_rows יש ערך של נָכוֹן כי אף אחד מהחיפושים לא תואם, או שֶׁקֶר כי אחד מהם עשה.
עכשיו אתה’מוכן לשימוש מחדש $ Returns_rows להדפיס תוצאה:
הערה
זכור את זה אם ($ return_rows) זהה בדיוק כמו אם ($ return_rows === true) . כך גם אם ($ תוצאה) .
רוב התסריט הזה מוכר. כל הקוד שאתה’השתמשו כדי להדפיס שורות נשאר זהה. הקוד הזה פשוט נע בתוך אם ($ return_rows) חסום, מכיוון שהוא חל רק אם המשתמש מכניס משהו כמו א בחר זה מחזיר (פוטנציאל) המון תוצאות.
ואז, ב אַחֵר לזה אם , התסריט שלך מדווח רק אם הדברים הלכו בסדר או לא. כעזרה נוספת, קטע זה של אם מדפיס את השאילתה המקורית כדי שהמשתמש יוכל לדעת מה בוצע.
עכשיו, מבחינה טכנית, אתה לא’זה באמת צריך את זה אם ($ תוצאה) . מאז שבדקת קודם כדי לבדוק אם תוצאה $ הוא שקרי, אם התסריט שלך מגיע לקטע האחרון הזה, אתה יודע את זה תוצאה $ הוא נָכוֹן , כך שתוכלו לפשט קצת דברים בסוף:
התסריט הזה הולך להיות קצת ארוך, אבל אתה יודע מה כל שורה אחת עושה בשלב זה. קדימה ונסה את זה.
כנראה שיצרת את כתובות אתרים טבלה (הזנת השאילתה הראשונה שלך מבוססת אינטרנט)-אפילו למרות שתסריט ה- PHP שלך לא עשה זאת’לא יודיע לך את זה. אז נסה להיכנס טיפת כתובות שולחן ; כמו שאילתת SQL שלך. ואז הפעל את השאילתה שלך, והפעם, עליך לקבל הודעה מועילה בחזרה, ספציפית לשאילתה ללא שורות שלך, כפי שאתה יכול לראות באיור 4-12.
התמודדות עם בני אדם
למרבה הצער, שם’S עדיין בעיה באחת השורות בקוד בסעיף הקודם. כרגע, אם המשתמש שלך מקליד את השאילתה הבאה, מה קורה?
טיפת כתובות שולחן;
הסט שלך של אם הצהרות מביינות זאת יְרִידָה הוא חלק מהשאילתה, מבין שאין לה שורות חוזרות, ועושה את הדבר הנכון: מדווח שהשאילתה רצה ללא בעיות, או שהתרחשה שגיאה.
איור 4-12. עכשיו run_query.PHP, כפי שמוצג בעמוד 119, מגלה אם זה’זה עבר שאילתה עם אחת ממילות המפתח המציינות שם’כל שורות החזרה. ההודעה כאשר הדברים מסתדרים טוב עדיין קצת חרך, אבל לפחות שם’אין מקום ריק לנסות להראות שורות תוצאה כשיש’כל שורות תוצאה להראות.
אבל מה עם השאילתה הזו? האם אתה רואה איפה הבעיה?
טיפת כתובות שולחן;
כאן’ההצהרה שצריכה לציין התאמה:
$ מיקום = STRPOS ($ QUERY_TEXT, "DROP"); אם ($ מיקום === False) < // this should return true, and so there are no return rows >
אבל השורה הזו מחפשת אחר יְרִידָה , מה שלא’התאמה “יְרִידָה” בכלל. Strpos מחפש מיתרים, אך הוא רואה אות קטנה, כמו “ד”, כמכתב שונה ממצב עליון “ד”. אז החיפוש הזה מוצא “יְרִידָה” אבל לא “יְרִידָה” אוֹ “יְרִידָה”.
וכמו תמיד, אתה’יש לבני אדם המשתמשים באפליקציה שלך ולא ברובוטים. אתה יכול’רק נניח שבני אדם אלה יהיו אזרחי SQL טובים ותשתמש תמיד במכתבי הון. אתה יכול להעביר הודעה קטנה על הטופס: אנא הקלד את ה- SQL שלך בכל אותיות גדולות , אבל בני אדם יהיו בני אדם, והם נוטים להתעלם מהוראות כאלה.
אתה’להוציא לפחות באותה מידה מזמנך העוסק בגורם האנושי בקוד שלך כקוד כתיבה שמטפל בזרימת הפעולה הרגילה של מה שנקרא. למעשה, ברגע שאתה מוסיף אנשים אמיתיים לקו החשיבה שלך, אתה’יבין את זה “נוֹרמָלִי” isn’זה מושג שימושי מאוד. במקום זאת, הקוד שלך פשוט צריך להתמודד עם כמה שיותר אפשרויות’t).
תיקון הבעיה הקטנה והנושא הגדול מתגלה כפשוט למדי: אתה יכול פשוט להמיר $ Query_string לכל אותיות גדולות לפני שמתחילים לחפש את זה:
$ return_rows = שקר; $ query_text = strtoupper ($ query_text);
$ מיקום = strpos ($ Query_Text, "Create"); // כל החסימות המקוננות אם.
עכשיו, אם סוגים של משתמשים טיפת כתובות שולחן אוֹ טיפת כתובות שולחן , מחרוזת החיפוש היא טיפת כתובות שולחן , ולחפש “יְרִידָה” יחזיר משחק.
אבל שם’בעיה נוספת! לפני שתמשיך לקרוא, בדוק אם אתה יכול להבין מה זה.
הערה
כן, באמת יש הרבה קמטים ובעיות עם תוכנית פשוטה אחת בלבד. זֶה’הסיבה שיש המון מתכנתים, אבל כל כך מעטים מתכנתים גדולים באמת: ההבדל הוא לטפל בכל הפרטים הקטנים האלה מבלי לזרוק את האייפון שלך דרך קיר סמוך.
הימנע משינוי קלט המשתמש בכל הזדמנות אפשרית
כדי לאתר את הבעיה הפוטנציאלית הזו עם סקריפט השאילתה שלך, התבונן בקטע האחרון של הקוד שלך’S הפעלה אם המשתמש נכנס לשאילתה ללא שורה כמו טיפה או הכנס:
// אין שורות. פשוט דווח אם השאילתה רצה או לא מהדהדת "השאילתה שלך עובדה בהצלחה.
"הד"
";
הפעל את הקוד הזה, ואתה’לקבל משהו כמו שאתה רואה באיור 4-13.
איור 4-13. לפעמים הבעיה הטובה ביותר שאתה יכול לפתור היא הבעיה שמנהלת’עדיין התרחש. התבונן מקרוב על שאילתת SQL כאן, והשווה אותה לשאילתה באיור 4-12. סוג זה של עבודת בלשים מייגעת אורכת שעות, אבל זה’S קריטי לחלוטין כדי לגרום ליישומי אינטרנט לעבוד בעולם האמיתי.
הערה
אם אתה’לעקוב אחר כך, ייתכן שתצטרך טיפת כתובות שולחן ; לפני שתוכל לִיצוֹר זה שוב, או לִיצוֹר את הטבלה לפני שתוכל יְרִידָה זה.
השווה בזהירות את הקוד באיור 4-12 ואיור 4-13. באיור 4-13, אתה’לשים לב שהכל נמצא בגדולה. זה הגיוני, כי כדי להקל על החיפוש, הוספת שורה זו לתסריט שלך:
$ query_text = strtoupper ($ query_text);
ואז, כשאתה מפלט $ query_text בסוף, הפלט מוצג בכל אותיות גדולות. האם זה עניין גדול? ובכן, זה לא’נראה שזה, לפחות לא כאן. אבל זה כן מגלה משהו: אחרי זה $ query_text המחרוזת מומרת ליתרון, בכל פעם שהיא’משמש, זה’זה חוזר עם כל האותיות הגדולות. אז נניח שהשאילתה המקורית הייתה משהו כזה:
בחר * ממשתמשים שבהם last_name = "maclachlan";
עכשיו קחו בחשבון את אותה שאילתה, הפכו לכל אותיות גדולות:
בחר * ממשתמשים שבהם last_name = "maclachlan";
תאמינו או לא, אלה אינם אותה שאילתה. בחר - ורוב שאילתות ה- SQL האחרות - הולכים לטפל בשם משפחה של “מקלכלן” להיות שונה לחלוטין מ “מקלכלן.” אז שתי השאילתות הללו אינן זהות בכלל.
כרגע זה לא’לא ליצור צרות כלשהן. התסריט שלך לעולם לא מפעיל מחדש את השאילתה, ו mysql_query פועל עם $ query_text לפני זה הפך לגרסתו הגדולה. אבל זו בעיה שמחכה לקרות.
באופן כללי, ברצונך לנסות להימנע משינוי ישיר של קלט מהמשתמש. זֶה’S מכיוון שאתה מקבל בדיוק סוג כזה של בעיה: ייתכן שתצטרך להשתמש בקלט הזה שוב, וברגע שאתה’שינה את זה, אתה יכול’לא לחזור.
למרבה המזל, התרופה פשוטה: במקום לשנות את המשתמש’S קלט, במקום זאת אתה משתמש במשתנה חדש כדי לאחסן את גרסת ה- UpperCase של השאילתה:
$ return_rows = שקר; $ uppercase_query_text = strtoupper ($ query_text);
$ מיקום = strpos ($ Query_Text, "Create");
עליך להשתמש במשתנה חדש זה בכל השוואות המחרוזות שלך:
$ return_rows = שקר; $ uppercase_query_text = strtoupper ($ query_text);$ מיקום = strpos ($ uppercase_query_text, "create");
אם ($ מיקום === False) <$ מיקום = strpos ($ uppercase_query_text, "insert");
אם ($ מיקום === False) <$ מיקום = strpos ($ uppercase_query_text, "עדכון");
אם ($ מיקום === False) <$ מיקום = strpos ($ uppercase_query_text, "מחק");
אם ($ מיקום === False) <$ מיקום = strpos ($ uppercase_query_text, "drop");
אם ($ מיקום === False) < // If we got here, it's not a CREATE, INSERT, UPDATE, // DELETE, or DROP query. It should return rows. $return_rows = true; >>>>>
שינוי קטן ככל שיהיה, הוא מגן עליך למקרה שתצטרך אי פעם להשתמש במחרוזת השאילתה הזו שוב.
ובדיוק ככה אתה’יש למעשה כלי שיבצע כל שאילתת SQL שתזרוק עליו. אבל שם’העבודה עדיין לעשות. כל קוד החיפוש הזה באמת אכן עומס את התסריט שלך ושם’פשוט לא להסתובב: התסריט שלך די קשה להבין בהתחלה (ואפילו שני). בפרק הבא, אתה’אני מתמודד עם כל זה, לוקח את הצורה שלך מצורה שימושית בסיסית לתרגיל ממש נחמד של שריר ה- PHP שלך.
משתמשי חשמל’ מרפאה: קבל ספציפית עם זמירה של מיקום ולבן מרחב השטח
בפרק זה, אתה’בהחלט עושה run_query.PHP הרבה יותר טוב, אבל עדיין יש כמה בעיות. נניח שמישהו כתב SQL ככה:
בחר * מ- Registrar_Activities איפה name = 'עדכן gpa' או name = 'drop a class'
זה בחר הצהרה, כך run_query.PHP צריך להריץ את ה- SQL ולהדפיס את כל השורות שהוחזרו מהשאילתה הזו. אבל שם’היא בעיה קטנה ומגעילה, isn’שם שם?
כן. הקוד שלך שמחפש “עדכון” וכן “יְרִידָה” ידווח כי לשאילתה זו יש את שתי המילים בפשטות ופשוט תחזור “ה- SQL שלך הופעל ללא בעיות.” אבל זה הוא בעיה!
כדי לפתור את הבעיה, חשוב על מבנה SQL. מילות מפתח מיוחדות אלה - צור, הכנס , והחברים שלהם - הכל הם ראשון מילה בשאילתה. אז אתה צריך להשיג את מיקום ההתאמה, ולראות אם המיקום הזה הוא מיקום 0. אתה יכול לעשות זאת על ידי הוספת שלך אם תנאים ושימוש במפעיל ב- PHP:
אם ($ מיקום === False || $ מיקום> 0)פירוש הצינור הכפול (||) פירושו “אוֹ” ל- PHP. אז שורת הקוד אומרת, אם שם’אין התאמה בכלל ( מיקום $ === שקר ) או שהשידוך הוא’t מתחיל במיקום הראשון (מיקום 0) ואז חפש את מילת המפתח הבאה. ברור שאתה’D צריך לשנות את כל שלך אם הצהרות, שהוא אפילו יותר מסורג. אז התיקון הזה הוא שיפור, אם כי אחד שבאמת מחזיק את הקוד שלך עוד יותר.
אבל זה מחמיר! אתה’התמודדות עם בני אדם אמיתיים, ובני אדם עושים דברים מצחיקים. נניח שמישהו נכנס ל- SQL זה לצורתך:
צור כתובות כתובות טבלה (id int, url varchar (100), תיאור varchar (100));עכשיו אתה’יש בעיה חדשה: זה’t a בחר , אבל קוד החיפוש שלך ניצח’לא מצא את אחת מאותן מילים מיוחדות בהתחלה. הדמות הראשונה היא רק מרחב: “ ”.
אבל אתה יכול לפתור גם בעיה זו באמצעות פונקציה מוכרת אחרת: מְטוּפָּח. מְטוּפָּח נפטר ממרחב הלבן, ואם תעשה זאת לפני שאתה מחפש, אתה צריך להיות במצב טוב:
$ uppercase_query_text = trim (strtoupper ($ query_text));זה כנראה נראה כמו המון עבודה לצורה ממש פשוטה, טקסטאראה. אבל כשאתה’עבודה עם קלט משתמש, אתה רוצה לחשוב כל הזמן מה המשתמשים עשויים לעשות. ואיך אתה יכול לעזור להימנע מהם לראות משהו מוזר או טועה. תחשוב ככה, ואתה’אני הולך לבנות יישומי אינטרנט טובים יותר, יציבים יותר ומהנים יותר.
לקבל PHP & MySQL: המדריך החסר עכשיו עם ה- O’פלטפורמת למידת ריילי.
O’חברי ריילי חווים ספרים, אירועים חיים, קורסים שאוצרו על ידי תפקיד עבודה ועוד מ- O’ריילי וכמעט 200 מפרסמים מובילים.
האם יש צורך להשתמש ב- PHP כדי להתחבר ל- MySQL
האם יש צורך להשתמש ב- PHP כדי להתחבר ל- MySQL אני עובד על היישום Desktop ואין לי ידע ב- PHP, האם יש מישהו בכיתה או פונקציונליות שניתן להשתמש בהן כדי להתחבר ל- MySQL אם כי יש הרבה תוכניות שנמצאות באינטרנט כדי לעשות זאת, אך אינן יכולות לחייב אחת ללא שימוש ב- PHP. האם יש התייחסות כלשהי או שאוכל לקבל את הדוגמה שלב אחר שלב ביחס לעבודה. ל- MySQL Config יש את הגדרות ברירת המחדל. כמו שם המשתמש הוא שורש והסיסמה ריקה שם השרת שלי מארח מקומי.
39.3K 4 4 תגי זהב 37 37 תגי כסף 59 59 תגי ברונזה
שאל 19 באוקטובר 2011 בשעה 23:00
7 4 4 תגי ברונזה
תייגתי את זה כ- PHP ו- MySQL והסרתי את תגיות הגמישות. לשאלה זו אין שום קשר לפלקס.
20 באוקטובר 2011 בשעה 0:34
3 תשובות 3
לא. PHP היא שפת תכנות. MySQL הוא מסד נתונים. התקן את MySQL והקלד את MySQL משורת הפקודה ותתחבר ל- MySQL באמצעות MySQL.
ענה 19 באוקטובר 2011 בשעה 23:02
10.7K 11 11 תגי זהב 61 61 תגי כסף 113 113 תגי ברונזה
אבל כיצד אוכל להתחבר למסד הנתונים האם אוכל לקבל התייחסות כלשהי להתחבר אליו.אני לא מסוגל לעשות זאת האם ל- Adobe יש כמה בספריית Build שאני צריך לדעת או התייחסות אחרת דרכה אוכל להתחבר למסד הנתונים.אנא זקוק לעזרה בנושא זה.
פונקציות MySQL
הערה:
רוב פונקציות MySQL מקבלות את Link_Identifier כפרמטר האופציונלי האחרון. אם הוא לא מסופק, משתמשים בחיבור שנפתח אחרון. אם הוא לא קיים, חיבור ניסיון לקבוע עם פרמטרי ברירת מחדל המוגדרים ב- PHP.ini . אם זה לא מצליח, הפונקציות חוזרות שֶׁקֶר .
תוכן העניינים
- mysql_affected_row
- mysql_client_encoding - מחזיר את שם מערך התווים
- mysql_close - סגור חיבור mysql
- mysql_connect - פתח חיבור לשרת mysql
- mysql_create_db - צור מסד נתונים של MySQL
- mysql_data_seek - העבר מצביע תוצאה פנימי
- mysql_db_name - אחזור שם בסיס נתונים מהשיחה ל- mysql_list_dbs
- mysql_db_query - בוחר בסיס נתונים ומבצע עליו שאילתה
- mysql_drop_db - drop (מחק) מסד נתונים של mysql
- mysql_errno - מחזיר את הערך המספרי של הודעת השגיאה מפעולה קודמת של MySQL
- mysql_error - מחזיר את הטקסט של הודעת השגיאה מפעולה קודמת של MySQL
- mysql_escape_string - בורח מחרוזת לשימוש ב- mysql_query
- mysql_fetch_array - השג שורת תוצאה כמערך אסוציאטיבי, מערך מספרי, או שניהם
- mysql_fetch_assoc - השג שורת תוצאה כמערך אסוציאטיבי
- mysql_fetch_fiel
- MySQL_FETCH_LENGRES - קבל את האורך של כל פלט בתוצאה
- mysql_fetch_object - השג שורת תוצאה כאובייקט
- mysql_fetch_row - קבל שורת תוצאה כמערך מונה
- mysql_field_flags - קבלו את הדגלים הקשורים לשדה שצוין בתוצאה
- mysql_field_len - מחזיר את אורך השדה שצוין
- mysql_field_name - קבל את שם השדה שצוין בתוצאה
- mysql_field_seek - הגדר את מצביע התוצאה לקיזוז שדה מוגדר
- mysql_field_table - קבל שם הטבלה השדה שצוין נמצא בו
- mysql_field_type - קבל את סוג השדה שצוין בתוצאה
- mysql_free_result - זיכרון תוצאה בחינם
- mysql_get_client_info - קבל מידע על לקוח mysql
- mysql_get_host_info - קבל מידע על MySQL מארח
- mysql_get_proto_info - קבל מידע על פרוטוקול mysql
- mysql_get_server_info - קבל מידע על שרת mysql
- mysql_info - קבל מידע על השאילתה האחרונה
- mysql_insert_id - קבל את המזהה שנוצר בשאילתה האחרונה
- MySQL_LIST_DBS - רשימת מסדי נתונים זמינים בשרת MySQL
- mysql_list_fields - רשימת שדות טבלה MySQL
- mysql_list_processes - רשימת תהליכי mysql
- mysql_list_tables - רשימת טבלאות במסד נתונים של MySQL
- mysql_num_fields - קבל מספר שדות בתוצאה
- mysql_num_rows - קבל מספר שורות בתוצאה
- mysql_pconnect - פתח חיבור מתמשך לשרת MySQL
- mysql_ping - פינג חיבור שרת או התחבר מחדש אם אין חיבור
- mysql_query - שלח שאילתת mysql
- mysql_real_escape_string - נמלט תווים מיוחדים במחרוזת לשימוש בהצהרת SQL
- mysql_result - קבל נתוני תוצאה
- mysql_select_db - בחר מסד נתונים של mysql
- mysql_set_charset - מגדיר את מערך התווים של הלקוח
- mysql_stat - קבל סטטוס מערכת נוכחי
- mysql_tablename - קבל שם טבלה של שדה
- mysql_thread_id - החזיר את מזהה השרשור הנוכחי
- mysql_unbuffered_query - שלח שאילתת SQL ל- MySQL מבלי להביא ולחץ את שורות התוצאה
הערות תרומות למשתמש 38 הערות
לפני 15 שנים
# נוצר על ידי Dhirendra ניתן להגיע ל- Dhirendrak ב- Yahoo Dot com
# סקריפט זה נוצר כדי לבדוק את הפרש הנתונים בין שתי טבלאות
# כאשר המבנה של שתי השולחנות זהה.
# מגבלה:
# 1) מבנה של שתי הטבלאות צריך להיות זהה.
# 2) שם של שתי הטבלה צריך להיות שונה אך אם זהה מלבד ברור
# טבלה שנייה צריכה להיות אם מסד נתונים שונה.
# 3) אם השתמש בשני מסד נתונים משני הרשאות מסד הנתונים צריך להיות זהה
# כשאני משתמש בכינויים כדי לקבל את המידע.
הִיכים
# שימושים ::
# 1) זה עשוי להיות שימושי כאשר ביצעת כמה שינויים בקיים שלך
# סקריפט ואתה מצפה לפלט מסוים. אז בעזרת זה
# פונקציה אתה יכול להשוות את ההשפעה עקב השינויים שלך בתסריט.
הִיכים
הִיכים
?php
$ מארח = ""; # שם מארח או כתובת IP
$ user = ""; # שם משתמש מסד נתונים
$ pass = ""; # סיסמת מסד נתונים
$ database = ""; # שם DateAbase איתו ברצונך להתחבר
# קבל קשר עם MySQL
$ dblink = @ mysql_connect ($ מארח, $ משתמש, $ pass);
# בחר ופתח את מסד הנתונים
mysql_select_db ($ מסד נתונים, $ dblink);
$ db1 = "< your db1 >"; // מסד נתונים ראשון
// מסד נתונים שני אם מסד הנתונים זהה לשתי הטבלאות מאשר להשתמש זהה ל- DB1
$ db2 = "< your db2 >";
$ table1 = "< your table1 >"; // טבלה ראשונה
// טבלה שנייה אם בסיס הנתונים זהה לשתי הטבלאות מאשר שם טבלה
# חייב להיות שונה אך שם השדות זהים וסדר השדות זהים.
// הפונקציה מתחילה כאן
פונקציה table_data_difference ($ ראשון, $ שנייה)
DBLink גלובלי של $;
$ sql1 = "הצג שדות מ- $ first";
$ תוצאה = mysql_query ($ sql1, $ dblink) או למות ("שגיאה בביצוע 1 = מילת מפתח">. mysql_error ());
בעוד ($ שורה = mysql_fetch_object ($ תוצאה))
<
$ מ-_fields [] = $ שורה -> שדה;
>
$ sql = "בחר * מ- $ first";
$ res = mysql_query ($ sql, $ dblink) או למות ("שגיאה בביצוע 2 = מילת מפתח">. mysql_error ());
$ j = 1;
בעוד ($ שורה = mysql_fetch_array ($ res))
$ num = count ($ מ-_fields);
$ sql_next = "בחר $ שנייה .* משנייה $ איפה ";
עבור ($ i = 0; $ i < $num ; $i ++)
$ sql_next = $ sql_next . "" . שנייה . "." . $ מ-_fields [$ i]. "= '" . $ ROW [$ מ-_FIELDS [$ i]]. "'ו";
>
$ sql_next = substr ($ sql_next, 0, strlen ($ sql_next)- 5);
$ res_next = mysql_query ($ sql_next, $ dblink) או למות ("שגיאה בביצוע 3 = מפתח מפתח">. mysql_error ());
$ num1 = mysql_num_rows ($ res_next);
אם ($ num1 == 0)
עבור ($ i = 0; $ i < count ( $from_fields ); $i ++)
$ val = $ val . "
" . $ מ-_fields [$ i]. "מילת מפתח">. $ ROW [$ מ-_FIELDS [$ i]];
>
// הצג את הרשומה שאינם מתאימים.
הד "
\ n " . $ j . "." . $ val;
הד "
-----------------------------------------------------";
$ J ++;
>
$ ראשון = $ db1 . '.' . $ טבלה 1;
שנייה $ = $ db2 . '.' . $ טבלה 2;
table_data_difference ($ ראשון, $ שנייה);
לפני 16 שנה
עבור משתמשי Windows, שימו לב:
אם Apache מותקן כשירות, ואתה משנה משתנה נתיב כך שהוא יכול להגיע ל- LibmySQL.DLL, תצטרך לאתחל מחדש את המכונה כדי ליישם שינויים.
לפני 15 שנים
כמו כן, כדי לאבטח נתוני MySQL ולהיות מסוגל לעמוד בתקני PCI, עליך להצפין את הנתונים. ישנן דרכים רבות לעשות זאת. עבור האקרים, אתה יכול להשתמש ב- DM-Crypt (www.saout.כלי DE/MISC/DM-CRYPT). בעיקרון הוא משמש להצפנת המחיצה כולה. אם אתה רוצה פיתרון מתוחכם לכו עם אבטחה כללי עבור MySQL מ- Packet General (www.מנות מנות.com)
ב- Windows, באפשרותך להשתמש בתכונת הצפנת דיסק המסופקת על ידי Windows עצמו או כלי כמו Trucrypt (www.TrueCrypt.org)
לפני 15 שנים
@Amanda 12-OCT-2007 09:58
כמעט הייתי צריך לשאול את עצמי אם זו שאלה אמיתית. אם שרת MySQL דוחה את ניסיון החיבור אז, כן, MySQL תוכל להחזיר שגיאה ל- PHP. ואם PHP לא יכול לגשת לשרת היעד MySQL בכלל, הוא גם חכם מספיק כדי להנפיק את השגיאה המתאימה כשלעצמה כשלעצמה.
לפני 17 שנה
אם אתה רוצה לגרום ל- PHP לעבוד יפה עם MySQL, אפילו עם Apache, תחת מערכות מבוססות Windows, נסה XAMPP, מ- Apache Friends. זה שומר להתעסק בקבצי config, וזו הבעיה העיקרית היחידה בניסיון לגרום לשלושה לעבוד יחד תחת Windows.
לפני 17 שנה
הערה על משאבים
כאשר משאב (ה.ז. מזהה קישור) נגמר בהיקף, הוא נמחק ומשאבי המחשב המשויכים (ה.ז. קישור ה- TCP למסד הנתונים) יסתיים גם כן. בינתיים הכל טוב!
עם זאת, בקוד הבא קישור TCP MySQL נמשך עד סוף הביצוע:
$ conn = mysql_connect ('שם מארח', 'שם משתמש', 'סיסמה');
$ conn = null;
שינה (30);
?>
הסיבה לכך היא שהמזהה הקישור הפנימי נשמר, כך שפונקציות MySQL הבאות יעבדו. נראה כי אין דרך למחוק את ההתייחסות הפנימית הזו.
אם היית, עם זאת, לפתוח 2 חיבורים, הוותיק ביותר יימחק אוטומטית (כך שהחיבור ל- HostName יסתיים בהצהרת $ conn = null, החיבור ל- HostName2 יתקיים עד סוף הסקריפט).
$ conn = mysql_connect ('שם מארח', 'שם משתמש', 'סיסמה');
$ conn2 = mysql_connect ('hostname2', 'שם משתמש', 'סיסמה');
$ conn = null;
$ conn2 = null;
שינה (30);
?>
לפני 17 שנה
אני משתמש ב- IIS 6, Php 5.04, Windows Server 2003 ו- MySQL 4.1.11. והנה מה שהצלחתי להבין.
לגרום ל- MySQL ו- PHP לדבר אחד עם השני, ב- PHP.CFG, אל תשכח להפעיל את התג
CGI.force_redirect = 0, וודא שאתה מגדיר אותו ב 0 (זה ברירת מחדל ב 1. פשוט מחק את החצי-קולון מלפניו כדי להפעיל אותו בקוד) ואז ה- phpinfo יגיד שהוא קורא את ה- CFG מספריית ההתקנה של PHP במקום שורש Windows שלך. ואז ה- phpinfo שלך יראה את הערך של MySQL שאנשים מסוימים עשויים להתקשות איתם. אין צורך בהגדרות רישום או העתקה של שום דבר. עקוב גם אחר שאר העזרה המצוינת מהערות המשתמש. הנה מה שעשיתי, כדי להפוך את זה לפשוט:
הכנתי תיקיה בעץ התיקיה ממש מעל קבצי התוכנית (חקור את המחשב שלך) וקראתי לו PHP. חילקתי את .גרסת ZIP PHP לתוכו (לא גרסת ההתקנה האוטומטית). ערכתי את ה- PHP.מומלץ ב- INI, שינה את שמו ל- PHP בלבד, הוסיף את שם המשתמש שלי ב- SQL, שם מסד נתונים וכו '.(אתה באמת צריך להסתכל מקרוב על קובץ ה- CFG ולוודא שאתה לא מתעלם ממשהו). מופעל את ההרחבה = php_mysql.DLL (פשוט מחק את החצי-קולון שמולו). הוסיף את תיקיית ה- PHP לנתיב (הוראות כיצד לעשות זאת הן די פשוטות ומתועדות לעיל). הפכתי גם את תיקיית Ext לנתיב, אבל אני לא בטוח אם זה באמת הכרחי. הערות המשתמש הן מה שבאמת עזר לי, אז חשבתי שאחזיר את החסד, ואנסה להרחיב קצת את הנושא הזה.
לפני 18 שנה
בעיות פדורה mysql!!
ב- Fedora 3 מודול PHP MySQL אינו מגיע עם התקנת ברירת המחדל. כדי להתקין אותו השתמש ב- $> yum התקן php_mysql
אם אתה לא עושה זאת תקבל שגיאות עם פונקציות MySQL כמו mysql_connect ()
מקווה שזה עוזר!
לפני 18 שנה
אם אתה רוצה לשכפל את הפלט של 'mysql - -html`, הדפסת את התוצאות שלך בטבלת HTML, ראה פונקציה זו:
לפני 21 שנה
היי, הנה טריק קטן ונחמד לבחור רשומות בסדר אקראי מטבלה במאגר MySQL לפני גרסה 3.23
בחר *, (itemid/itemid) *rand () כ- myrandom מפריטים הזמינו על ידי myrandom
[עורכים הערה: ופשוט "בחר * מהזמנת Foo מאת RAND ()" אחרי 3.23]
לפני 15 שנים
אחרי שסוף סוף קיבלתי את IIS, PHP ו- MySQL במכונת Windows XP חדשה, החלטתי לכתוב את הצעדים שנקטתי כדי שתוכל לראות איך זה נעשה: http: // www.Atksolutions.com/מאמרים/install_php_mysql_iis.html
מקווה שזה עוזר.
לפני 15 שנים
/*
התקנת שרת MySQL (קהילה) ב- 32 סיביות Windows XP המריצה apache
?php
ב- Windows, הדרך המומלצת להריץ את MySQL היא להתקין אותו כשירות Windows, לפיה MySQL מתחיל ועוצר אוטומטית כאשר Windows מתחיל ועוצר. ניתן לשלוט על שרת MySQL המותקן כשירות גם מפקודות שורת הפקודה, או עם כלי השירות הגרפי כמו PhpMyadmin.
PHP ---> מחברי mysql (php_mysql.dll ו- php_mysqli.DLL כהרחבות)
MySQL מספקת את תוספי MySQL ו- MySQLI עבור מערכת ההפעלה של Windows בכתובת http: // dev.mysql.com/הורדות/מחבר/PHP/עבור MySQL גרסה 4.1.16 ומעלה, mysql 5.0.18, ו- MySQL 5.1. כמו הפעלת כל סיומת PHP ב- PHP.ini (כגון php_mysql.DLL), יש להגדיר את ההנחיה של PHP להנחיית PHP לספרייה בה ממוקמים תוספי ה- PHP.
MySQL כבר לא מופעל כברירת מחדל, ולכן ה- php_mysql.יש להפעיל DLL DLL בתוך PHP.ini. כמו כן, PHP זקוק לגישה לספריית הלקוחות MySQL. קובץ בשם libmysql.DLL כלול בחלוקת PHP של Windows וכדי ש- PHP ידבר עם MySQL קובץ זה צריך להיות זמין לנתיב מערכות Windows.
סקריפט PHP מעקב מועיל לבדיקת חיבור PHP עם MySQL.
*/
// $ connect = mysql_connect ("שם המארח שלך", "ספריית שורש mysql", 'סיסמת mysql, אם בכלל');
// $ connect = mysql_connect ("שם מארח או כתובת - 127.0.0.1 "," שורש ", 'סיסמה');
$ connect = mysql_connect ("localhost", "שורש", 'סיסמה');
אם ($ Connect) הד "מזל טוב!\ n
";
הד "מחובר בהצלחה לשרת מסד הנתונים של MySQL.\ n
";
> אחרת $ שגיאה = mysql_error ();
הד "לא יכול היה להתחבר למסד הנתונים. שגיאה = $ שגיאה .\ n
";
יְצִיאָה();
>
// חיבור סגירה
$ close = mysql_close ($ connect);
אם ($ סגור) הד "\ n
";
הד "עכשיו סוגר את החיבור. \ n
";
הד "חיבור MySQL נסגר גם בהצלחה.\ n
";
> elseecho "יש בעיה בסגירת חיבור MySQL.\ n
";
>
יְצִיאָה();
?>
לפני 16 שנה
עשיתי פונקציה זו כדי להפחית שיחות DB. אתה יכול לאחסן תוצאות MySQL בהפעלה var ולמיין את התוצאות בכל עמודה. יכול לעבוד נחמד באפליקציית Ajax.
פונקציה mysql_sort ($ תוצאות, $ sort_field, $ dir = "asc") $ temp_array = array ();
$ i = 0;
foreach ($ תוצאות כ- $ res) $ temp_array [$ i] = $ res [$ sort_field];
$ i ++;
>
אם ($ dir == "ASC") ASORT ($ temp_array);
> אחר ארסורט ($ temp_array);
>
$ new_results = array ();
$ i = 0;
foreach ($ temp_array כ- $ k => $ v) $ new_results [$ i] = $ תוצאות [$ k];
$ i ++;
>
ksort ($ new_results);
להחזיר $ new_results;
//להשתמש
אם (ספירה ($ _ הפעלה ["מילואים"]) == 0) $ _session ["res"] = [קבל תוצאות מסד נתונים עם זאת אתה יכול]
>
$ _Session ["res"] = mysql_sort ($ _ session ["res"], $ _request ["sort"], $ _request ["dir"]);
לפני 17 שנה
ג'ון קוגשול כתב סקריפט תאימות PHP5 EXT/MYSQLI ליישומים שעדיין משתמשים בפונקציות ה- EXT/MYSQL הישנות. זה מונע את הטרחה של ניסיון לקבל גם את תוספי MySQL וגם MySQLI העמוסים ב- PHP5, שיכולים להיות מסובכים.
לפני 17 שנה
הפעלת MySQL עם Windows Server 2003/IIS 6.0:
מצא את ה- PHP שלך.ראשית קובץ INI, בדוק את PHPINFO () כדי לראות היכן PHP מחפש כרגע PHP.ini. (אני.ה. באמצעות מתקין Windows עבור PHP 5.0.4, ה- PHP.קובץ ה- INI הוצב ב- C: \ Windows Dir.עם זאת, אני ממליץ כי אינך משתמש במתקין - עבור עם התקנה ידנית מלאה.
הגדר את הדברים הבאים ב- PHP.ini:
Display_errors = ON
ERROR_REPORTING = E_ALL
זה יוודא שתראה שגיאות שמתעוררות במהלך התצורה. הקפד לתקן את אלה כשתסיים לשחק עם PHP.Ini! אל תשאיר את ההגדרות האלה כאלה במכונת ייצור.
ב- PHP.INI קבע את הדברים הבאים:
soffice_dir = "pathtoextensions (usulyally [yourpathtopp] \ ext)"
הרחבה = php_mysql.DLL (וודא שזה לא מורכב אם זה כבר ב- PHP שלך.ini)
ב- IIS, פתח הרחבות שירות אינטרנט, לחץ על "הוסף סיומת שירות אינטרנט חדש. "
Type-in PHP עבור שם ההרחבה
תחת קבצים נדרשים:
הוסף [thatpathtopp] \ php5isapi.dll
הוסף [thatpathtopp] \ php5ts.dll
לחץ על 'החל' ואז לחץ על 'אישור'
צור אתרי אינטרנט כמוך בדרך כלל, אך וודא שיש להם הרשאות הניתנות להפעלה, ולא רק גישה לתסריט. תחת הכרטיסייה "ספריית בית", לחץ על 'תצורה'. גלול מטה ברשימה בחלקו העליון ובדוק אם אתה יכול למצוא PHP. אם כן, וודא שהנתיב להפעלה עבור PHP נכון. אם אינך מוצא PHP ברשימה, לחץ על 'הוסף. ', ואז דפדף להפעלה הנכונה, [Thopathtoph] \ php5isapi.DLL ולחץ על אישור. בשדה ההרחבה, הזן 'php'. פעלים כבר צריכים להיות מוגדרים ל"כל הפעלים ", להשאיר את זה ככה.
צור דף מבחן עם קוד זה:
קרא לזה מבחן.PHP, והניח קובץ זה לאתר האינטרנט שיצרת זה עתה. דפדף בדף, עם Firefox רצוי;), וודא שיש לך קטע MySQL עם קצת מידע על MySQL שם. אם לא, אז הנתיבים שלך נדגים, או שאתה עדיין לא עורך את ה- PHP הנכון.ini (שוב, התבונן במיקום ש- phpinfo () מראה לך, ופשוט ערוך אותו שם אם אתה צריך, אז הזז אותו אחר כך והפך מחדש).
mysql_connect
הרחבה זו הושלמה ב- PHP 5.5.0, וזה הוסר ב- PHP 7.0.0. במקום זאת, יש להשתמש בתוסף MySQLI או PDO_MYSQL. ראה גם MySQL: בחירת מדריך API. חלופות לפונקציה זו כוללות:
תיאור
mysql_connect ((
מחרוזת $ שרת = ini_get ("mysql.default_host ") ,
מחרוזת $ שם משתמש = ini_get ("mysql.Default_user ") ,
מחרוזת $ סיסמא = ini_get ("mysql.default_password ") ,
bool $ new_link = שֶׁקֶר ,
int $ client_flags = 0
): משאב | שֶׁקֶר
פותח או שימוש חוזר בחיבור לשרת MySQL.
פרמטרים
שרת MySQL. זה יכול לכלול גם מספר יציאה. ה.ז. "שם מארח: יציאה" או נתיב לשקע מקומי.ז. ":/נתיב/אל/שקע" עבור ה- LocalHost.
אם הנחיית PHP MySQL.Default_host אינו מוגדר (ברירת מחדל), ואז ערך ברירת המחדל הוא 'localhost: 3306'. במצב SQL Safe, פרמטר זה מתעלם ומעריך 'localhost: 3306' משמש תמיד.
שם המשתמש. ערך ברירת המחדל מוגדר על ידי MySQL.Default_user. במצב SQL Safe מתעלמים מפרמטר זה ושם משתמשים בשם המשתמש שבבעלותו תהליך השרת.
הסיסמא. ערך ברירת המחדל מוגדר על ידי MySQL.default_password. במצב SQL Safe, פרמטר זה מתעלם ומשמש סיסמה ריקה.
אם מתבצעת שיחה שנייה mysql_connect () עם אותם טיעונים, לא יוקם קישור חדש, אלא במקום זאת, מזהה הקישור של הקישור שנפתח כבר יוחזר. הפרמטר של new_link משנה התנהגות זו ומייצר mysql_connect () תמיד פתח קישור חדש, גם אם mysql_connect () נקרא לפני כן עם אותם פרמטרים. במצב SQL Safe, מתעלמים מפרמטר זה.
הפרמטר של Client_FLAGS יכול להיות שילוב של הקבועים הבאים: 128 (הפעל נתוני עומס טיפול מקומי), Mysql_client_ssl , Mysql_client_compress , Mysql_client_ignore_space אוֹ Mysql_client_interactive . קרא את הקטע על קבועי לקוח MySQL למידע נוסף. במצב SQL Safe, מתעלמים מפרמטר זה.
ערכי החזרה
מחזיר מזהה קישור MySQL על הצלחה או שֶׁקֶר על כישלון.
דוגמאות
דוגמה מס '1 mysql_connect () דוגמא
$ link = mysql_connect ('localhost', 'mysql_user', 'mysql_password');
אם (! קישור $) למות ('לא יכול היה להתחבר:' . mysql_error ());
>
הד 'התחבר בהצלחה';
mysql_close ($ קישור);
?>?php
דוגמה מס '2 mysql_connect () דוגמה באמצעות שם מארח: תחביר יציאה
// אנו מתחברים לדוגמא.com ונמל 3307
$ link = mysql_connect ('דוגמה.com: 3307 ',' mysql_user ',' mysql_password ');
אם (! קישור $) למות ('לא יכול היה להתחבר:' . mysql_error ());
>
הד 'התחבר בהצלחה';
mysql_close ($ קישור);
?php
// אנו מתחברים ל- LocalHost בפורט 3307
$ קישור = mysql_connect ('127.0.0.1: 3307 ',' mysql_user ',' mysql_password ');
אם (! קישור $) למות ('לא יכול היה להתחבר:' . mysql_error ());
>
הד 'התחבר בהצלחה';
mysql_close ($ קישור);
?>
דוגמה מס '3 mysql_connect () דוגמה באמצעות תחביר ":/path/to/socket"
// אנו מתחברים ל- LocalHost ולשקע E.ז. /tmp/mysql.גֶרֶב
?php
// גרסה 1: השמיט את Localhost
$ link = mysql_connect (':/tmp/mysql', 'mysql_user', 'mysql_password');
אם (! קישור $) למות ('לא יכול היה להתחבר:' . mysql_error ());
>
הד 'התחבר בהצלחה';
mysql_close ($ קישור);
// גרסה 2: עם Localhost
$ link = mysql_connect ('localhost:/tmp/mysql.גרב ',' mysql_user ',' mysql_password ');
אם (! קישור $) למות ('לא יכול היה להתחבר:' . mysql_error ());
>
הד 'התחבר בהצלחה';
mysql_close ($ קישור);
?>
הערות
הערה:
בכל פעם שאתה מציין "localhost" או "localhost: port" כשרת, ספריית הלקוחות של MySQL תעקוף זאת ותנסה להתחבר לשקע מקומי (בשם צינור ב- Windows). אם ברצונך להשתמש ב- TCP/IP, השתמש ב" 127.0.0.1 "במקום" localhost ". אם ספריית לקוח MySQL מנסה להתחבר לשקע המקומי הלא נכון, יש להגדיר את הנתיב הנכון כ- MySQL.default_host ב- PHP.INI ושדה השרת הותירו ריקות.
הערה:
הקישור לשרת ייסגר ברגע שביצוע הסקריפט מסתיים, אלא אם כן הוא נסגר מוקדם יותר על ידי קריאה במפורש של mysql_close () .
הערה:
שגיאה "לא יכולה ליצור שקע TCP/IP (10106)" פירושו בדרך כלל שההנחיה של תצורת משתנים_דר אינה מכילה תו E . ב- Windows, אם הסביבה לא מועתקת, משתנה הסביבה של SystemRoot לא יהיה זמין ול- PHP יהיו בעיות בטעינת Winsock.
ראה גם
- mysql_pconnect () - פתח חיבור מתמשך לשרת MySQL
- mysql_close () - סגור חיבור mysql
הערות תרומות למשתמש 36 הערות
לפני 10 שנים
היה מטפל כאן אם אתה משתמש ב- UTF8.
הקובץ db.OPT של מסד הנתונים שלך אמור להכיל את השורות הבאות:
Default-SET-SET = UTF8
ברירת מחדל collation = utf8_general_ci
זה אומר שמסד הנתונים שלך נוצר כדי להשתמש במערך ה- UTF8.
אחת הדרכים להשיג זאת היא:
צור מסד נתונים my_database תווים ברירת מחדל הגדרת UTF8 COBSITATE UTF8_GENERAL_CI;
ואז, לאחר התחברות אליו מ- PHP שעליך להשתמש בו:
mysql_set_charset ("utf8", $ חיבור);
אם לא תעשה זאת, תקבל בעיות מכוערות למקרה שתוכנה אחרת קוראת וכותבת לאותה מסד נתונים.
לפני 15 שנים
נושא החיבורים יותר מדי יכול לנבוע מכמה בעיות.
1. אתה משתמש ב- PConnect. זה יכול לקשור קשרים רבים ולא ממש נחוץ ל- MySQL מכיוון שקשרים חדשים הם ממש מהירים.
2. ילדי אפאצ'י מסתובבים זמן רב מדי - שלבו את זה עם Pconnect ויש לכם מתכון לאסון.
הצעות: הפחית. ואל תשתמש ב- pconnect.
לפני 6 שנים
מודולי FCGID_MODULE/MOD_FCGID.כך
Fcgidmaxrequestlen 209715200
Fcgidconnecttimeout 240
Fcgidiotimeout 240
Fcgidbusyscaninterval 240
FCGIDBUSYTIMEOUT 240
# Esta línea instruye al servidor web para que reconozca un tipo nuevo (php)
Addhandler fcGID-Script .PHP
# Esta línea indica al servidor web donde está instalado php.
Fcgidinitialenv phprc "c:/php"
# Esta línea indica al servidor web que debe ejecutar la aplicación
# PHP-CGI.Exe Cuando Un Cliente (Navegador) solicite una página con
# סיומת .PHP
Fcgidwrapper "c:/php/php-cgi.exe " .PHP
# Con esta línea damos los permisos necesarios para que los לקוחות Puedan
# Acceder/ejecutar a los archivos .PHP
אינדקסים של אפשרויות עוקבים אחר כך
AllingOverride אף אחד
אפשר מכולם
לפני 16 שנה
במקרה שמישהו אחר יקבל "לקוח אינו תומך בפרוטוקול אימות המבוקש על ידי השרת; שקול שגיאת שדרוג MySQL Client". הבעיה היא שיטת חיזוק הסיסמה החדשה המשמשת את MySQL> = 4.1 מוזכר להלן.
או עדכן את ה- PHP שלך ל- V5 בו נתמכת ה- hashing הסיסמה החדשה או השתמש ב- old_password () ב- MySQL 4.1.
עדכן את MySQL.SET SET SANSFER = Old_Password ("YouroldHashAssword") איפה user = 'youruserid' ו- host = 'yourhost'
לפני 9 שנים
$ spojeni = mysql_connect ($ שרת, $ כניסה, $ מעבר) או Die ('nelze se pripojit');
mysql_select_db ($ db, $ spojeni);
mysql_query ("הגדר שמות 'utf8'");
?>
לפני 15 שנים
Mysql_client_ssl לא עובד, השתמש ב- mysqli ו- mysqli-> ssl_set ()
לפני 13 שנה
אני מקווה שזה חוסך למישהו צער.
מחשב DEV שלי הוא Windows ומריץ את WampServer. יש לי בעיות תכופות בכך ש- PHP לא יכול להתחבר ל- MySQL לאחר תקופות של פעילות DB קיצונית.
סיפור ארוך קצר, זה בגלל שלא הפעלתי את MySQL באמצעות צינורות בשם ו- Windows נגמר ליציאות הזמינות כדי לשרת PHP. ככל הנראה, ב- Windows, יש לך 5000 יציאות לעבוד איתם וברגע שהם נפתחים, הם נשארים כך במשך 120 שניות לפני שתשתחרר. זה גורם לבעיות ב- MySQL/Networking מכיוון שמתבקש יציאה חדשה לכל חיבור.
אתה יכול לקרוא עוד על הבעיה בכתובת:
(קישור ארוך מדי והיה צריך להתפרק)
http: // dev.mysql.com/doc/refman/5.0/en
/לא יכול להתחבר לשרת.HTML#יכול לא להתחבר לשרת-על-חלונות
?>
מכיוון ש- MySQL נמצא ב- LocalHost, אני יכול פשוט לאפשר צינורות בשם (וכך אתה צריך להתקין MySQL אם אינך זקוק לרשתות) כדי לעקוף את הבעיה במקום לעקיפת הדרך המופיעה בדף זה.
לפני 20 שנה
רק למקרה שלא ידעת. אתה יכול להשתמש ב- mysql_connect בפונקציה כדי להתחבר למסד נתונים והחיבור הוא סופר-גלובל. כלומר אתה יכול להשתמש ב- mysql_query בפונקציות אחרות או בשום פונקציה בכלל ו- PHP ישתמש בחיבור שפתחת. זהו מעט ידע שימושי שעוזר אם יש לך אתר גדול עם המון תסריטים. אם אתה יוצר פונקציה אחת להתחבר ל- DB, וקרא לפונקציה זו בכל הסקריפטים שלך, זה הופך את תחזוקת הקוד הקלה יותר מכיוון שאתה צריך רק לעדכן שורת קוד אחת כדי לשנות את חיבור MySQL שלך במקום לעדכן את כל הסקריפטים שלך בנפרד.
לפני 15 שנים
השימוש בחיבורי MySQL יכול להיות מסובך עם חפצים. אני משתמש ב- mysql_connect () בשיעור מסד נתונים שכתבתי וההרס של הכיתה מתקשר ל- mysql_close. מכיוון שיש לי כמה מאובייקטים של מסד נתונים אלה, MySQL_CONNECT משתמש בחיבורים קיימים. זה בסדר למעט כאשר התסריט מגיע לסוף הביצוע ואיסוף האשפה של PHP קורא לכל פונקציות __destruct () של האובייקטים (). mysql_close () זורק אזהרה כי החיבור אינו חוקי, במקרה שלי לאובייקט אחד. זה קורה עם אובייקטים המשתמשים בחיבור קיים, מכיוון שהחיבור כבר נסגר. פתרתי את הבעיה על ידי אילוץ mysql_connect () ליצור חיבור חדש בכל פעם. זה לא יעיל אך מספיק למטרותיי לעת עתה.
לא הייתי אומר שזה באג לסו, אבל זה משהו שצריך להשגיח עליו. אני מתאר לעצמי להשתמש ב- MySQLI הוא הפיתרון האולטימטיבי.
לפני 15 שנים
לפעמים, אני רוצה ששירות MySQL יתחיל אוטומטית כאשר האפליקציה שלי צריכה את זה. זה נכון במיוחד אם אתה עובד במחשב פיתוח ו/או בסביבת אינטראנט קטנה.
אתה יכול לעשות משהו כזה: אם הפונקציה MySQL_CONNECT () מחזירה כוזבת, נסה לכפות את האתחול של שירות MySQL!
לדוגמה, מתחת לחלונות:
$ link = @ mysql_connect ($ שרת, $ משתמש, $ מעבר);
אם (ריק (קישור $)) @ Exec ("%SystemRoot%\\ System32 \\ Net.EXE START MYSQL ");
שינה (5);
$ link = @ mysql_connect ($ servidor, $ usuario, $ clave);
>
?>
בלינוקס כמובן אתה יכול לנסות "/etc/init.d/mysqld התחל "אבל תצטרך הרשאות מיוחדות.
לפני 16 שנה
אם בין שיחה ראשונה לשנייה עם אותם טיעונים הייתה שיחה נוספת עם טיעון אחר, קישור החיבור הראשוני אינו מנוצל חוזר, אך במקום נוצר חיבור חדש, ללא קשר לטיעון New_Link.
לדוגמה, כאן ייפתח רק קישור אחד בודד ואז נעשה בו שימוש חוזר:
$ link1 = mysql_connect ("localhost");
$ link2 = mysql_connect ("localhost");
?>
וכאן ייפתח קישורים נפרדים: קישורים נפרדים:
$ link1 = mysql_connect ("localhost");
$ link3 = mysql_connect ("127.0.0.1 ");
$ link2 = mysql_connect ("localhost");
?>
אז אם רצית לעבור בין חיבורים רק באמצעות שיחה ל- mysql_connect, ולסמוך על מטמון הקישורים הפנימי שלו, אתה יכול לבזבז את חיבורי מסד הנתונים שלך.
לפני 13 שנה
בכל פעם שאתה פותח שני חיבורים למסד נתונים יחיד,
סביר להניח שלא תקבל שום שגיאה בבחירת DB לא קיים.
$ db1 = mysql_connect ( . );
mysql_select_db ('kyment_db', $ db1);
$ db2 = mysql_connect ( . );
mysql_select_db ('not_existing_db', $ db2);
mysql_query (. , $ DB2);
// לא יחזיר שגיאות והשאילתה לא תבוצע.
?>
שימו לב ותוכלו לחסוך מספר שעות של ניפוי באגים.
לפני 12 שנים
אם אתה נתקל בבעיות מהירות באמצעות פקודה זו לשרת מרוחק, אתה יכול להוסיף את השורה "דלג על פיתרון שם" שלך שלי.CNF לתקן את זה.
לפני 19 שנים
כדי להשתמש בנתוני עומס פונקציית infile מקומית מ- MySQL (ב- MySQL 4.0.16, Php 4.3.3), הגדר את הפרמטר החמישי של MySQL_CONNECT () ל- CLESTED_LOCAL_FILE
תודה 'phpweb ב- eDen2 dot com' כדי להצביע על כך
לפני 16 שנה
תוספת של רשומות ל- HTTPD.conf to stop .קבצי INC המוגשים על ידי Apache בהחלט שימושי ולהומלץ עליו.
אבל זה לא משנה את העובדה שקבצים אלה צריכים להיות קריאים על ידי אפאצ'י כדי שמעבד ה- PHP יוכל להשיג אותם.
כל עוד אין לך משתמשים מרובים, אולי לא מהימנים, אז זה בסדר. אבל כשאתה מפעיל שירות רב-משתמשים גדול עם אלפי משתמשים, תמיד אפשרי שאחד מהם יסתכל על שלך .INC קבצים וציין את הסיסמאות שיש לך בתוכם. הם יכולים אפילו להעתיק אותם לתסריטים משלהם ולשנות את מסדי הנתונים שלך!
גם אם משתמשים מקומיים מהימנים, תמיד קיימת האפשרות של סקריפט סורר (PHP או שפה איזושהי יותר) שתותקן על ידי משתמש בורה. התסריט הזה עשוי לקרוא את שלך .קבצי INC (בין אם הם נמצאים בעץ פרסום האינטרנט או לא) וחשפו את הסיסמה שלך.
לפני 19 שנים
פיתרון נוסף לבעיות האבטחה של הכנסת שמות משתמש וסיסמאות לתסריטים. לא מצאתי את זה מתועד בשום מקום אחר אז חשבתי שהייתי מציע את זה לתיעוד המקוון. .
אל תכניס סיסמאות עבור MySQL לסקריפטים שעשויים להיקרא על ידי כל משתמש במחשב. במקום זאת הכניסו אותם לקובץ תצורת Apache וודאו שהוא אינו קריא בעולם. (אפאצ'י קורא את קבצי התצורה העיקריים שלו כשורש.)
לדוגמה, הוסף את זה ל- HTTPD שלך.CONF (ו- CHMOD IT ל- 600 או 660) ואז אמר לאפצ'י שלך לטעון את עצמו מחדש (Apachectl חינני).
php_value mysql.Default_user Fred
php_value mysql.Default_Password Secret
php_value mysql.שרת Default_Host.דוגמא.com
ואז כל מה שאתה צריך בקוד ה- PHP שלך הוא
$ ידית = mysql_connect () או למות (mysql_error ());
הסיסמאות וכו 'ייאספו רק על ידי סקריפטים הפועלים בספריה הנקוב (או ספריית משנה). הדבר עשוי להיעשות לגבי וירטואליסטים וכו '.
אם אינך רוצה להמשיך לטעון מחדש את שרת Apache שלך, אתה מבחן דברים שמכניס את הנחיות ה- php_value ל (קריא בעולם) .קובץ htaccess. (ברור שלא לשימוש בייצור.)
אם אתה צריך לבצע ניפוי באגים בערכים המסופקים (או לא), השתמש בקטע זה:
@syslog (log_debug, "באמצעות user =".ini_get ("mysql.Default_user ").
"לעבור =".ini_get ("mysql.default_password ").
"מארח =".ini_get ("mysql.default_host "));
(זה מניח שאתה לא פועל ב'- Safe_Mode 'ושאתה על יוניקס מסוג כלשהו.)
לפני 12 שנים
המצב שלי: "יכולתי להתחבר ל- MySQL מ- PHP דרך Apache ו- MySQL דרך קונסולת MySQL ולא יכולתי להתחבר דרך ה- PHP"
אבל, PHP יכול רק להתחבר ל- MySQL באמצעות mysql_connect ("localhost", "שורש", "סיסמה");
"הסלינוקס שלה לא מאפשר לאפצ'י ליצור קשרים מרוחקים"
פִּתָרוֹן:
setSebool -p httpd_can_network_connect = 1
לפני 15 שנים
לאחרונה ראיתי בעיה מעורפלת בה אוכל להתחבר ל- MySQL מה- PHP דרך Apache ו- MySQL דרך קונסולת MySQL, ולא יכולתי להתחבר דרך ה- PHP-CLI. זה היה ב- Windows (XP). בדרך כלל אני משתמש בתוסף MySQLI, אבל ניסיתי גם את MySQL, ושניהם סירבו לעבוד.
התחלתי מחדש את השירות מספר פעמים, וה- PHP-CLI עדיין לא היה מתחבר.
בסופו של דבר זה התבהר.
הקפדתי להפסיק את השירות. ואז, הורדתי חבילה בינארית רוכסן מ- dev.mysql.com והתחילה את השרת כמה פעמים מקו הפקודה (mysqld/mysqld-nt, שם mysqld-nt מכוון במיוחד עבור Windows) ועצרו אותו ("כיבוי mysqladmin"). לאחר מכן הצלחתי להתחבר בהצלחה מ- PHP -CLI ("php -r" mysql_connect ('localhost', 'שורש', ''); ").
וודאתי שהוא הופסק, התחלתי את השרת הרגיל מקו הפקודה, ואז זה היה מוצלח. לאחר מכן הפסקתי את זה והתחלתי אותו דרך פאנל השירותים, והכל עדיין עבד.
אני מניח שכאשר השירות הופעל מחדש בהתחלה, היה רכיב שנפטר וסירב להיות כיבוי למרות שנראה שהשירות נעצר, אך כיבוי אותו דרך Mysqladmin הרג הכל לגמרי.
לפני 13 שנה
שים לב שהצינור בשם Windows אינו שמיש מאז PHP 5.3, וחיבור TCP ישמש אפילו ב- Localhost.
לפני 16 שנה
הפוסט מ- 'Graham_rule ב- Ed Dot AC Dot UK' אמור לכלול את האזהרה הבאה:
ורינג: ערכי הנחיות אלה ייחשפו אם אחד מהקוד כולל את פונקציית phpinfo ().
פונקציית phpinfo () תדפיס ערכים אלה ברורים כ- יום. אני ממליץ מאוד נגד שיטה זו לאחסון מידע על אימות MySQL.
אני ממליץ ליצור פונקציות חיבור וניקוי בקובץ כולל נפרד. אם האבטחה היא דאגה, אתר את קובץ הכלול מחוץ לתיקיית שורש האינטרנט שלך.
פונקציה getMyConnection ()
Global $ g_link;
אם ($ g_link)
להחזיר $ g_link;
$ g_link = mysql_connect ('מארח.שם ',' משתמש ',' סיסמה ') או למות (' לא יכול היה להתחבר לשרת.');
mysql_select_db ('database_name', $ g_link) או Die ('לא הצליחו לבחור מסד נתונים.');
להחזיר $ g_link;
>
פונקציה ניקוי פונקציה ()
Global $ g_link;
אם ($ g_link != שקר)
mysql_close ($ g_link);
$ g_link = שקר;
>
?>
פשוט כלול את החיבור שלך.קובץ PHP בסקריפט שלך ובכל מקום שאתה משתמש בפונקציה MySQL_Query () כולל שיחה לפונקציה getMyConnection ().
$ res = mysql_query ("בחר . ", GetMyConnection ());
?>
לפני 15 שנים
אם אתה מנסה לפתוח חיבורי MySQL מרובים, נפרדים עם אותו משתמש, סיסמא ושם מארח MySQL, עליך להגדיר $ new_link = true כדי למנוע mysql_connect להשתמש בחיבור קיים.
לדוגמה, אתה פותח שני חיבורים נפרדים לשני מסדי נתונים שונים (אך באותו מארח ועם אותו משתמש וסיסמא):
$ db1 = mysql_connect ($ dbhost, $ dbuser, $ dbpass);
$ rv = mysql_select_db ($ dbname1, $ db1);
$ db2 = mysql_connect ($ dbhost, $ dbuser, $ dbpass);
$ rv = mysql_select_db ($ dbname2, $ db2);
בשלב זה, גם $ DB1 וגם $ DB2 בחרו במסד הנתונים שנקרא על ידי $ dbname2.
הדרך לעקיפת הבעיה היא לדרוש שהחיבור השני של MySQL יהיה חדש:
$ db1 = mysql_connect ($ dbhost, $ dbuser, $ dbpass);
$ rv = mysql_select_db ($ dbname1, $ db1);
$ db2 = mysql_connect ($ dbhost, $ dbuser, $ dbpass, true);
$ rv = mysql_select_db ($ dbname2, $ db2);
כעת, $ db1 היה צריך לבחור $ dbname1, ו- $ db2 היה צריך לבחור $ dbname2.
זה תועד גם בדף MySQL_SELECT_DB.
הערה: זה מתרחש רק כאשר פרמטרי השרת, שם המשתמש והסיסמה זהים לכל הצהרת mysql_connect.
לפני 11 שנים
חיבורים ניידים: אם אתה מעביר את קוד המקור שלך משרתים אחד לשרתים שונים ואתה רוצה להימנע מתצורה מחודשת בהגשה חדשה, השתמש בדגל $ _server ['server_name'] כ:
מתג ($ _server ['server_name'])
<
מקרה 'שרת 1.דוגמא.com ':
mysqlconnect ('מארח 1', 'user1', 'סיסמא 1');
mysql_select_db ('db1');
לשבור;
מקרה 'שרת 2.דוגמא.com ':
mysqlconnect ('host2', 'user2', 'סיסמא 2');
mysql_select_db ('db2');
לשבור;
>
?>
זה הופך חיבור מותנה למסד הנתונים של MySQL. הוא בוחר אוטומטית את השרת הנכון לפי שם השרת ממנו פועל הסקריפט שלך.
יש לקוות שאתה אוהב את התצורה הניידת הזו.
לפני 16 שנה
אם אתה מעדיף להשתמש בשם מארח במקום IP במחרוזת החיבור שלך בסקריפט (כדי להיות מסוגל לשנות את ה- IP כרצונו), אך אינך רוצה את התקורה של בדיקות DNS, פשוט הוסף אותו לקובץ/etc/מארח שלך (ב- Windows: %Windir %/System32/Drivers/Etc/Hosts).
לדוגמה, הוסף את הדברים הבאים לקובץ המארחים שלך (שינוי ה- IP הבגוס ל- IP האמיתי של השרת שלך):
הערה: ב- Linux, וודא שיש לך "הזמנה: מארחים, קשורים" על /וכו ' /מארח.קובץ CONF.
בתסריט, הפוך את חיבור MySQL כמו כך:
$ sid = mysql_connect ("mysqlserver1", "משתמש", "מעבר");
?>
הערה: מדגם זה נמצא ב- PHP, אבל זה יכול להיות כל שפת תכנות אחרת (פשוט הקלד "Ping MySQLServer1" על הנחיה, בשרת שלך)
ושם יש לך את זה! אם השרת שלך אי פעם יוקצה ל- IP אחר, פשוט עדכן את קובץ המארחים עם החדש (כל סקריפט יעבוד כפי שהוא, גם אם תחת שמות מארחים שונים).
לפני 10 שנים
הערה קטנה אם הסקריפטים שלך ישנים הרבה, אתה רוצה להריץ בדיוק את אותה הצהרת SQL פעמיים+ ויש לך שגיאת "mysql נעלם" הרבה.
נסה להגדיר את הפרמטר הרביעי ל- True מכיוון שנראה לפעמים ש- PHP אינו מגלה את המשאב הזהה X בו הוא השתמש במבט זהה אחרון הוא כעת בול.
זה מיועד כאשר mysql_pping () לא עובד בשביל המצב שלך כמובן.
לפני 18 שנה
ב- MySQL4.1 ומאוחר יותר, פורמט Hashing של סיסמת ברירת המחדל השתנה והפך אותה לא תואמת עם 3.X לקוחות.
גיליתי ש- mysql_connect () עובד על גרסאות השרת> = 4.1 כאשר סיסמת המשתמש שלך ב- MySQL ריקה מכיוון שאימות סיסמא אינו נעשה במקרה זה, אחרת אתה צריך להשתמש בשיטת חיבור אחרת (ה.ז. mysqli).
גם אם אתה משתמש בטבלאות MySQL ישנות בשרת חדש (אני.ה. הסיסמאות מאוחסנות בפורמט הישן), ואז השרת ישתמש בשיטת ה- AUTH הישנה באופן אוטומטי ופונקציה זו אמורה לעבוד בכל המקרים.
אני מקווה שזה יעזור למישהו, זה היה מבולבל אותי זמן מה כי חלק מהמשתמשים ב -4 שלי.שרת אחד יכול להתחבר וחלקם לא יכלו.
לפני 16 שנה
תוהה אי פעם מה זה "שם משתמש ברירת מחדל"?
$ link = mysql_connect () או למות (mysql_error ());
$ fruction = mysql_query ("בחר session_user (), current_user ();");
$ שורה = mysql_fetch_row ($ תוצאה);
הד "משתמש הפעלה:", $ שורה [0], "
\ n ";
הד "המשתמש הנוכחי:", $ שורה [1], "
\ n ";
?>
שניהם הם ODBC@LocalHost בהתקנת Win2K שלי, כך שהעצה שלי ל- Windows היא:
- צור משתמש MySQL בשם ODBC ללא סיסמה
- הוסף LocalHost למשתמש ODBC [לחץ באמצעות לחצן העכבר הימני על ODBC]
- הגדר סכימה שואבת ל- ODBC@LocalHost
- השתמש ב- MySQL_CONNECT () ללא PARMS, או לא להשתמש;)
זה הופך לעבודה גם עם ODBC_CONNECT:
odbc_connect ("mydsn", "", "")
לפני 9 שנים
שלום לכולם.
השתמש "127.0.0.1 "במקום" localhost "עבור php5.4-win7 אם אתה מרגיש שהמהירות איטית.כי win7 השתמש ברירת מחדל של IPv6.
"localhost" מיועד ל- IPv4.
לפני 14 שנה
רק רציתי לשתף עטיפה משותפת שאני משתמש בה לביצוע הצהרות SQL בשורה אחת. זה עטיפה קלה לשימוש הדואגת לחיבור פתוח/קרוב. לחלופין, ניתן להחליף את MySQL_CONNECT ב- MySQL_PCONNECT לחיבורים מתמשכים.
פונקציה ExecuteQuery ($ שאילתה, $ db, $ nocon)
אם ($ nocon != "נוקון")
אם ($ dB != "") Connect ($ dB);
אחר להתחבר ("pascal_crm");
$ תוצאה = mysql_query ($ שאילתה);
$ err = mysql_error ();
אם ($ שגיאה != "") ECHO "שגיאה = $ ERR";
אם ($ nocon != "נוקון")
mysql_close ();
להחזיר תוצאה $;
>
לפני 17 שנה
התחבר ל- MySQL באמצעות צינור בשם תחת Windows:
ב שלי.ini, הוסף את זה:
ואז התחבר לשרת ואז התחבר ל- MySQL באמצעות
לפני 14 שנה
כשאתה מתחבר ומצפה להשתמש בהליך מאוחסן, עליך להעביר דגל מיוחד ל- MySQL דרך הפקודה Connect, אחרת לא תחזיר את התוצאות, וזה יביא לשגיאה זו:
נוהל אלכסגרים.GetStats_ForumCategories לא יכולים להחזיר תוצאה מוגדרת בהקשר הנתון
כדי לתקן זאת, שנה את מחרוזת החיבור שלך, הוספת ", שקר, 65536" כשני השדות האחרונים:
$ this-> con = mysql_connect ($ this-> h, $ this-> u, $ this-> p, false, 65536);
לפני 13 שנה
אם אתה מקבל שגיאה "לא יכול להקצות כתובת מבוקשת" יתכן שיש לך בעיה עם יציאת MySQL. בדיוק העברתי את השרת שלי ל- Mac OS X 10.6 ו- MySQL_CONNECT נתנו שגיאה זו. נכנס ל /etc /php.קובץ INI והגדרת מספר יציאת ברירת המחדל ל- 3306 תיקן את הבעיה.
ה- PHP.קובץ INI מציע ש- PHP יבחר את היציאה באמצעות $ MySQL_TCP_PORT או כניסה MySQL-TCP ב- /etc /שירותים, אך במקרה זה זה לא כך. /etc/שירותים במחשב שלי יש 3306 רשומים, אך זה לא הועלה.
זהו סוג של דוח באגים, בכך שהתכונה המתועדת לא עובדת. אנא אל תמחק זאת עד שהקהילה תחליט כיצד לטפל בבעיה. זהו אחד מאותם תרגילי משיכת שיער כדי לתקן.
לפני 13 שנה
אם אתה מקבל שגיאות MySQL כמו #2006: שרת MySQL נעלם, ואתה משתמש ב- MySQL_CONNECT () ו- PCNTL_FORK () אז הפוך את Shure שאתה מתחבר מחדש לשרת MySQL עם כל ילד שנוצר אותו אתה Fork ().
שלפתי את השיער במשך ימים רבים מכיוון שהשתמשתי באותו חיבור MySQL לכל ילד וקיבלתי שגיאות "MySQL Server נעלם".
להלן דוגמה פשוטה:
$ link = mysql_connect ($ db_server, $ db_user, $ db_pass);
mysql_select_db ($ db_database, $ קישור));
$ pid = pcntl_fork ();
אם ($ pid == - 1)
// שגיאה מזלג
elseif ($ pid) // ההורה יהיה כאן
> אחרת // הילד צריך לחסל חיבור * חדש * MySQL.
// אם אתה משתמש ב- mysql_connect ללא הפרמטר הרביעי
// ואז הוא ישתמש בחיבור מההורה. אבל
// אם הילד נפטר, החיבור לא יהיה אמין
// גם ההורה.
// אז, שימו לב ל"אמת "כפרמטר רביעי.
$ newlink = mysql_connect ($ db_server, $ db_user, $ db_pass, true);
mysql_select_db ($ db_database, $ newlink));
// .
>
?>
לפני 15 שנים
[ערוך על ידי Danbrown ב- PHP DOT Net: הבעיה של משתמש זה ממחיש היא בעיה שכיחה בעת התמודדות עם מספר מסדי נתונים מ- PHP. שימו לב להערותיו בסוף הקוד להסבר.]
נראה שלמדתי זאת בדרך הקשה:
// קבע חיבור ל- Master DB Server
mysql_connect (db_host, db_user, db_password);
mysql_select_db (db_name);
// קבע חיבור לאשכול עבדים לקריאה בלבד
$ objmysql_read = mysql_connect (slave_db_host, slave_db_user, slave_db_password);
mysql_select_db (db_name, $ objmysql_read);
$ strsql = "בחר col1, col2 מ-" . Db_name . "." . "TBL1 איפה 1 = 1";
$ objrs = mysql_query ($ strsql, $ objmysql_read); // מחזיר נתונים מעבדים
$ strsql = "הכנס ל"היכנס" אליו " . Db_name . "." . "TBL1 (COL1, COL2) ערכים (VAL1, VAL2)";
// התנהגות צפויה, להכניס את ההצהרה האחרונה ל- Master DB, מכיוון שהיא אינה מתייחסת למשאב הקריאה בלבד במפורש. במקום זאת, הוא מכניס את הרשומה לחיבור האחרון, למרות שהוא לא אמור, מכיוון שהחיבור האחרון אינו חיבור גלובלי/אנונימי כמו הראשון, זה $ objmysql_read.
// תצא מסנכרון DB בכל האשכול שלך אלא אם כן תגדיר במפורש את כל משאבי החיבור
לפני 11 שנים
לאחר שדרוג mysql Sect עד 5.5.21 מ- 5.0.9 ב- CentOS, WinXP שלי הפסיק להיות מסוגל להתחבר למארח עם הודעת השגיאה
'לחיצת יד גרועה'.
פיתרון בסופו של דבר לבעיה היה להסיר את mysql_client_ssl מהשיחה ל- mysql_connect ().
אני גם אדווח על כך כבאג.
לפני 14 שנה
אם אתה מנסה להתחבר לשרת מרוחק, הנה כמה דברים שיכולים להשתבש. אולי רשימה זו תחסוך מישהו זמן מה:
1. יתכן שתצטרך ליצור קשר עם התמיכה הטכנית של השרת המרוחק:
א. כדי להבטיח שתוכל לעבור את חומת האש שלו. זה לא בהכרח מספיק כדי שמספר השרת שלך יופיע ברשימת מארחי הגישה המרחוק של CPANEL של CPANEL. זה תלוי איך להוגדר דברים של חברת השרתים;
ב. כדי לגלות באיזה מספר יציאה הם משתמשים בחיבורי מסד נתונים, אשר עשויים להיות לא ברירת המחדל המשמשת את mysql_connect;
ג. אם אתה משתמש ב- ODBC, המארח אליו אתה מנסה להתחבר עשוי להתקין או לא להתקין מנהלי התקנים ODBC; וכן
ד. אם אתה עובד מ- IP דינאמי, יתכן שהם יוגדרו כדי להכיל אותו, או שתצטרך להשתמש בפרוקסי. ראה http: // forge.mysql.com/wiki/mysql_proxy .
2. אם אתה עובד משרת משותף בעצמך, מספר השרת שנשלחת למכתב ההרשמה הוא כנראה לא מספר השרת בו אתה צריך להשתמש כדי להתחבר למסד נתונים מרוחק. אתה זקוק למספר השרת של המחשב בו האתר שלך יושב, ולא את מספר השרת של החשבון הווירטואלי שלך במכונה זו. אתה יכול להשיג את זה מהתמיכה הטכנולוגית שלך.
אני אסיר תודה לג'ונתן ג'ונס ב- Bluehost על הניתוח הזה.