Λειτουργεί μόνο η PHP με το MySQL
Είναι απαραίτητο να χρησιμοποιήσετε την PHP για να συνδεθείτε στο MySQL?
Όταν πρόκειται για τη σύνδεση με μια βάση δεδομένων MySQL, η PHP προσφέρει μια βολική και αποτελεσματική λύση. Με το PHP, δεν χρειάζεται να κατεβάσετε πρόσθετο κωδικό ή να εγκαταστήσετε plugins για να συνδεθείτε στο MySQL. Στην πραγματικότητα, η PHP είναι έτοιμη να συνδεθεί με το MySQL ακριβώς έξω από το κουτί, καθιστώντας το ένα ισχυρό εργαλείο για τη συνδεσιμότητα της βάσης δεδομένων.
Η σύνδεση της PHP με το MySQL είναι τόσο απλή όσο ακολουθώντας μερικά βήματα:
- Συνδεθείτε σε εγκατάσταση MySQL.
- Χρησιμοποιήστε τη σωστή βάση δεδομένων MySQL.
- Αποστολή ερωτημάτων SQL στη βάση δεδομένων.
- Ανακτήστε και χειριστείτε τα αποτελέσματα.
Αυτά τα βήματα χρησιμεύουν ως θεμέλιο για κάθε σενάριο PHP που αλληλεπιδρά με μια βάση δεδομένων. Είτε δημιουργείτε πίνακες, εκτελείτε αναζητήσεις ή προσθέτοντας δεδομένα στη βάση δεδομένων, τα δύο πρώτα βήματα παραμένουν σταθερά.
Ας ρίξουμε μια πιο προσεκτική ματιά στη διαδικασία σύνδεσης σε μια βάση δεδομένων MySQL στη PHP:
Για να δημιουργήσετε μια σύνδεση, το σενάριο PHP πρέπει να γνωρίζει τον κεντρικό υπολογιστή βάσης δεδομένων, το όνομα χρήστη και τον κωδικό πρόσβασης. Αυτές οι πληροφορίες επιτρέπουν στην PHP να ξεκινήσει τη σύνδεση όπως θα κάνατε όταν χρησιμοποιείτε τον πελάτη γραμμής εντολών MySQL.
Ξεκινήστε δημιουργώντας ένα νέο σενάριο PHP που ονομάζεται “Connect.PHP “και εισαγάγετε τις ακόλουθες γραμμές:
Σημειώστε ότι εάν η βάση δεδομένων σας εκτελείται στο ίδιο μηχάνημα με τα αρχεία PHP και web serving, το όνομα κεντρικού υπολογιστή βάσης δεδομένων θα είναι συνήθως “localhost.«
Η εντολή “mysql_connect” λαμβάνει στον κεντρικό υπολογιστή, το όνομα χρήστη και τον κωδικό πρόσβασης ως παραμέτρους και αρχίζει τη σύνδεση. Εάν η σύνδεση αποτύχει, η λειτουργία “μήτρας” χρησιμοποιείται για την εμφάνιση ενός μηνύματος σφάλματος για να αποτρέψει τη συνέχιση του σεναρίου. Διαφορετικά, το σενάριο εμφανίζει ένα επιτυχημένο μήνυμα σύνδεσης.
Ακολουθώντας αυτά τα βήματα, μπορείτε εύκολα να συνδέσετε PHP σε μια βάση δεδομένων MySQL και να αξιοποιήσετε τη δύναμη του MySQL στις εφαρμογές σας στο διαδίκτυο.
Συχνές ερωτήσεις:
1. Γιατί είναι βολικό να χρησιμοποιηθεί η PHP για σύνδεση με MySQL?
Η PHP είναι έτοιμη να συνδεθεί με το MySQL χωρίς να χρειάζεται πρόσθετο κώδικα ή plugins. Αυτή η ευκολία εξοικονομεί χρόνο και προσπάθεια κατά την οικοδόμηση εφαρμογών ιστού που απαιτούν συνδεσιμότητα βάσης δεδομένων.
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 λόγω της απλότητας και της ευρείας υιοθέτησής της, άλλες γλώσσες προγραμματισμού όπως η Python, η Java και η C# παρέχουν επίσης βιβλιοθήκες και API για αλληλεπίδραση με τις βάσεις δεδομένων MySQL. Η επιλογή της γλώσσας εξαρτάται από τις απαιτήσεις και τις προτιμήσεις του έργου.
Είναι απαραίτητο να χρησιμοποιήσετε την PHP για να συνδεθείτε στο MySQL
Οι σταθερές πληκτρολογούνται σε όλα τα γράμματα. Αρσενικά’απαιτείται, αλλά αυτό’είναι ένα άλλο από αυτά “Μιλήστε σαν προγραμματιστής PHP” πράγματα. Θέλετε οι σταθερές να φαίνονται διαφορετικές από τις μεταβλητές και η χρήση όλων των κεφαλαίων ονομάτων είναι ένας τρόπος για να το κάνετε αυτό. Οι σταθερές επίσης’δεν έχω το $ Πριν από το όνομά τους, το οποίο είναι ένας ακόμη τρόπος για να διαφοροποιηθεί μια σταθερά από μια μεταβλητή.
Php & MySQL: Το εγχειρίδιο που λείπει από τον Brett McLaughlin
Αποκτήστε πλήρη πρόσβαση στο Php & MySQL: Το εγχειρίδιο που λείπει και 60k+ άλλοι τίτλοι, με δωρεάν δοκιμή 10 ημερών του O’Reilly.
Υπάρχουν επίσης ζωντανές εκδηλώσεις, μαθήματα που επιμελούνται από τον ρόλο της εργασίας και πολλά άλλα.
Κεφάλαιο 4. Σύνδεση της PHP με το MySQL
Τώρα που εσύ’έβλεπα λίγο από τη δύναμη τόσο της PHP όσο και της MySQL, αυτό’χρόνος για να φέρετε αυτά τα δύο juggernauts μαζί. Με πολλές γλώσσες προγραμματισμού, όποτε θέλετε να μιλήσετε σε μια βάση δεδομένων, πρέπει να κατεβάσετε και να εγκαταστήσετε επιπλέον κωδικό ή να εγκαταστήσετε μικρά μοντέλα plug-in που δίνουν τα προγράμματά σας υποστήριξη για να μιλήσετε σε αυτήν τη βάση δεδομένων. PHP ISN’Ωστόσο, όμως. Είναι έτοιμο να συνδεθεί με το MySQL από τη στιγμή που τρέχετε το PHP εντολή.
Ακόμα κι αν εσύ’μόλις πρόσφατα ξεκίνησε το ταξίδι σας στην Php Mastery, εσείς’ΕΙΝΑΙ ΕΤΟΙΜΟ ΓΙΑ ΝΑ ΧΡΗΣΙΜΟΠΟΙΗΣΕΤΕ ΜΙΑ ΠΕΡΙΕΧΟΜΕΝΑ ΣΑΣ ΣΑΣ. Απλά πρέπει να μάθετε μερικές νέες εντολές και πώς να αντιμετωπίσετε τα προβλήματα που μπορούν να εμφανιστούν όταν εσείς’Εργασία με μια βάση δεδομένων. Στην πραγματικότητα, εσύ’Θα δημιουργήσετε μια απλή φόρμα που σας επιτρέπει να εισαγάγετε το SQL και να το εκτελέσετε στη βάση δεδομένων MySQL. Οταν εσύ’Προγραμματιστής PHP μπορείτε να πάτε πέρα από το mysql εργαλείο γραμμής εντολών.
Στη συνέχεια, για να βάλετε ένα κεράσι πάνω από τα πανύψηλα sundae της PHP και MySQL καλοσύνη, εσείς’Θα γράψω ένα άλλο σενάριο. Αυτό το σενάριο θα λάβει όλες τις πληροφορίες από τα έντυπα που εσείς’Vave, προσθέστε αυτές τις πληροφορίες σε μια βάση δεδομένων και, στη συνέχεια, προσθέστε μια ακόμη φόρμα για να αφήσετε τους χρήστες σας να αναζητήσουν έναν άλλο χρήστη με το όνομα. Όλα αυτά σε ένα κεφάλαιο? ναι πράγματι.
Γράφοντας ένα απλό σενάριο σύνδεσης PHP
Ανεξάρτητα από το πόσο απλό ή προχωρήσει τα σενάρια PHP, αν μιλούν σε μια βάση δεδομένων, αυτοί’Θα ξεκινήσω με τα ίδια λίγα βήματα:
- Συνδεθείτε σε εγκατάσταση MySQL.
- ΧΡΗΣΗ Η σωστή βάση δεδομένων MySQL.
- Αποστολή SQL στη βάση δεδομένων.
- Αποκτήστε τα αποτελέσματα πίσω.
- Κάντε κάτι με τα αποτελέσματα.
Τα βήματα 3, 4 και 5 θα αλλάξουν ανάλογα με το τι εσείς’εκ νέου. Ένα σενάριο που δημιουργεί τραπέζια φαίνεται λίγο διαφορετικό από ένα σενάριο που ψάχνει μέσω υφιστάμενων πινάκων.
Αλλά αυτά τα πρώτα δύο βήματα – που συνδέονται με το MySQL και χρησιμοποιώντας τη σωστή βάση δεδομένων – είναι πάντα η ίδια, ανεξάρτητα από το πόσο φανταχτερό το σενάριό σας. Απλά σκεφτείτε λοιπόν: ο κωδικός εσείς’Το RE πρόκειται να γράψει είναι ο ίδιος κώδικας που οι προγραμματιστές που κάνουν $ 150 ή $ 200 την ώρα γράφουν κάπου. (Αυτοί’Απλά γράφοντας αυτόν τον κώδικα σε πολύ σπίτια με ρομπότ που τους εξυπηρετούν παγωμένο τσάι καθώς σαλόνι δίπλα στην πισίνα.·
Σύνδεση σε μια βάση δεδομένων MySQL
Πρώτον, πρέπει να πείτε στο σενάριο PHP Πώς να συνδεθείτε σε μια βάση δεδομένων. Αυτή η διαδικασία λέει βασικά την PHP να κάνει ό, τι κάνατε όταν ξεκινήσατε τον πελάτη γραμμής εντολών MySQL (MySQL στο Mac OS X). Όταν συνδεθήκατε στον διακομιστή ιστού σας’S Βάση Δεδομένων, πιθανότατα χρησιμοποιήσατε μια εντολή όπως το Followng:
bmclaugh@akila: ~ $ mysql-host = dc2-mysql-02.κατρίνα.com -user = bmclaugh - -password
Χρειάζεστε τις ίδιες πληροφορίες για να δώσετε PHP, ώστε να μπορεί να συνδεθεί: ο κεντρικός υπολογιστής βάσης δεδομένων, το όνομα χρήστη σας και ένας κωδικός πρόσβασης.
Πυροβολήστε τον επεξεργαστή κειμένου σας και δημιουργήστε ένα νέο σενάριο. κάλεσε το συνδέω-συωδεομαι.PHP . Αυτό το σενάριο θα είναι όσο το δυνατόν απλούστερο, επειδή το μόνο που χρειάζεστε είναι να συνδεθείτε με τη βάση δεδομένων σας, ΧΡΗΣΗ τη σωστή βάση δεδομένων και, στη συνέχεια, εκτελέστε ένα δείγμα ερωτήματος SQL για να βεβαιωθείτε ότι τα πράγματα λειτουργούν σωστά.
Στο σενάριο σας, πληκτρολογήστε τις ακόλουθες γραμμές:
Σφάλμα σύνδεσης με βάση δεδομένων: " . mysql_error () . «"); ηχώ "Συνδεδεμένο με το MySQL!
"? ?>
Σημείωση
Αν εσύ’Εκτέλεση της βάσης δεδομένων σας στο ίδιο μηχάνημα με τα αρχεία σας PHP και web-serving, το όνομα του κεντρικού υπολογιστή σας είναι συνήθως τοπικός. τοπικός είναι απλώς ένας τρόπος να πούμε “το τοπικό μηχάνημα.”
Το’είναι πραγματικά τόσο απλό! Και όπως τα περισσότερα από τα άλλα σενάρια PHP σας’Έχουν γράψει, αν και υπάρχουν μερικές νέες εντολές, πιθανότατα γνωρίζετε ήδη σχεδόν ακριβώς τι ακριβώς ακριβώς’συμβαίνει εδώ.
Πρώτον, εκεί’είναι μια νέα εντολή: mysql_connect . Αυτή η εντολή παίρνει απλά έναν κεντρικό υπολογιστή βάσης δεδομένων, ένα όνομα χρήστη και έναν κωδικό πρόσβασης και συνδέει. Το’είναι ακριβώς σαν εσύ’τρέχει το δικό σας mysql εργαλείο και σύνδεση σε μια απομακρυσμένη βάση δεδομένων.
Σημείωση
Βεβαιωθείτε ότι αλλάζετε τα δικα σου.βάση δεδομένων.οικοδεσπότης, το όνομα σας , και ο κωδικός σας στις τιμές για τη δική σας βάση δεδομένων.
Αλλά τι γίνεται με το καλούπι κομμάτι? Ακούγεται λίγο φρικτό (όπως Λόρδος των μύγες φρικτό, όχι Λυκόφως έφηβος-ανθρωπογενής). Στην πραγματικότητα, είναι λίγο δυσάρεστο: χρησιμοποιείτε καλούπι όταν κάτι ενδέχεται πηγαίνετε στραβά στο σενάριό σας. Σκέφτομαι καλούπι μου είπε, “Εάν ο κωδικός μου πεθαίνει, τότε κάντε κάτι λιγότερο δυσάρεστο από το να πετάξετε έναν κωδικό σφάλματος στον χρήστη μου. Σε αυτήν την περίπτωση, καλούπι εκτυπώνει ένα μήνυμα σφάλματος που κέρδισε’T να τρομάξει τους χρήστες σας.
Αλλά πριν μπορέσετε να καταλάβετε καλούπι , Πρέπει να γνωρίζετε λίγο για την εσωτερική λειτουργία του mysql_connect . Οταν mysql_connect τρέχει, είτε δημιουργεί είτε επαναχρησιμοποιεί μια υπάρχουσα σύνδεση με τη βάση δεδομένων σας. Στη συνέχεια επιστρέφει αυτή τη σύνδεση με το πρόγραμμα PHP και διαθέτει όλες τις άλλες εντολές PHP-to-MYSQL’Θα μάθω σύντομα. Αλλα αν mysql_connect μπορώ’να δημιουργήσετε αυτήν τη σύνδεση – για παράδειγμα, εάν η βάση δεδομένων σας δεν είναι’t τρέχει ή εσύ’έχω έναν κακό οικοδεσπότη ή όνομα χρήστη- mysql_connect Επιστρέφει μια πολύ διαφορετική τιμή: ψευδής .
Και λοιπόν’Πραγματικά συμβαίνει στο σενάριό σας είναι κάτι τέτοιο:
Αλλά αυτό είναι πολύ πληκτρολόγηση, οπότε η PHP σάς επιτρέπει να το συντομεύσετε στα εξής: Σφάλμα που συνδέεται με τη βάση δεδομένων: " . mysql_error () . «"); ηχώ "Συνδεδεμένο με το MySQL!
"? ?>
Όχι μόνο αυτό το σενάριο είναι μικρότερο, αλλά γυρίζει τα πράγματα γύρω από λίγο. Βασικά λέει, προσπαθήστε να συνδεθείτε (χρησιμοποιώντας mysql_connect ), και αν το αποτέλεσμα είναι’t true (το ή μέρος του κώδικα), λοιπόν καλούπι. καλούπι εκτυπώνει ένα μήνυμα σφάλματος, αλλά επίσης “πέθα.” Με άλλα λόγια, τελειώνει το σενάριό σας. Οπότε αν mysql_connect επιστρέφει ψευδής , και καλούπι τρέχει, το σενάριό σας θα βγει. Οι χρήστες σας κέρδισαν’να δεις ποτέ το “Συνδεδεμένο με το MySQL!” γραμμή επειδή το σενάριο θα έχει σταματήσει να τρέχει. Το’νεκρός στο πάτωμα του δωματίου του διακομιστή, αναζητώντας μια σύνδεση βάσης δεδομένων εργασίας. (Δείτε το πλαίσιο σε όλους πεθαίνουν σε κάποιο σημείο για περισσότερες λεπτομέρειες για το καλούπι εντολή.·
Όχι μόνο αυτό, αλλά mysql_connect ρυθμίζει μια άλλη λειτουργία όταν μπορεί’συνδέστε. Κάνει τα σφάλματα που έτρεξε στην προσπάθεια να συνδεθεί διαθέσιμο μέσω άλλης εντολής, mysql_error . Έτσι μπορείτε να καλέσετε mysql_error Ως μέρος του δικού σας καλούπι Δήλωση για να δείξουμε τι πραγματικά συνέβη.
Σημείωση
Τεχνικώς, mysql_connect, mysql_error , και καλούπι είναι όλα παραδείγματα του λειτουργίες . Μια συνάρτηση είναι ένα μπλοκ κώδικα, συνήθως με ένα όνομα που του έχει αντιστοιχιστεί, το οποίο μπορείτε να καλέσετε από τον δικό σας κωδικό οποτεδήποτε χρειάζεστε αυτό το μπλοκ. Το’είναι πολύ πιο γρήγορα και καλύτερα να καλέσετε μια συνάρτηση με το όνομα παρά να ξαναγράψετε το μπλοκ κώδικα που αντιπροσωπεύει ξανά και ξανά.
Κύριος’Δεν ανησυχείτε για τις λειτουργίες για τώρα, όμως. Απλώς χρησιμοποιήστε τα όπως οποιαδήποτε παλιά εντολή 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, αλλά να κάνετε ακόμη και τα πιο βασικά demos σας να φαίνονται επαγγελματικά και οι πελάτες σας θα σας αγαπήσουν γι ‘αυτό.
Εικόνα 4-2. Αυτές οι τρεις λέξεις σημαίνουν ότι το σενάριο PHP τώρα μπορεί να κάνει ουσιαστικά οτιδήποτε μπορείτε να φανταστείτε με τη βάση δεδομένων σας. Αλλά εκεί’Είναι κάτι που λείπει: Πώς γνωρίζει η MySQL ποια βάση δεδομένων είναι δική σας? Πρέπει ακόμα να πείτε στο PHP ποια βάση δεδομένων θα χρησιμοποιηθεί.
Επιλέγοντας τη βάση δεδομένων για χρήση
Εκεί’είναι κάτι υπέροχο να περιμένω γύρω από τη γωνία προγραμματισμού τώρα: Σχεδόν όλα mysql_ Η οικογένεια των λειτουργιών λειτουργεί το ίδιο: τους δίνετε κάποιες αξίες και επιστρέφουν κάτι χρήσιμο. Εάν συμβεί κάτι κακό, συνήθως επιστρέφετε ψευδής ή ένα ανύπαρκτο αντικείμενο (κάτι που οι περισσότεροι προγραμματιστές καλούν μηδενικό ή μηδέν ·.
Τώρα λοιπόν πρέπει να πείτε στο MySQL ποια βάση δεδομένων σας θέλει να χρησιμοποιήσει το σενάριο PHP. Εκεί’είναι μια συνάρτηση για αυτό: mysql_select_db .
Σημείωση
Εκεί’είναι μια εκτεταμένη οικογένεια mysql_ λειτουργίες. Ίσως θελήσετε να προσθέσετε σελιδοδείκτη στη σελίδα τεκμηρίωσης: www.PHP.καθαρό/εγχειρίδιο/en/ref.mysql.PHP. Εάν έχετε κολλήσει ποτέ, κατευθυνθείτε εκεί και δείτε αν μια λειτουργία μπορεί να κάνει ό, τι χρειάζεστε.
Χρήστες τροφοδοσίας’ Κλινική: Όλοι πεθαίνουν σε κάποιο σημείο
Το’είναι τρομακτικά εύκολο να ξεχάσουμε να τα προσθέσετε καλούπι Δηλώσεις στα σενάρια PHP σας. Η PHP δεν’να τους απαιτείται, έτσι’Είναι απόλυτα χαρούμενος που αποδεχτείτε κάτι τέτοιο:
mysql_connect ("βάση δεδομένων.πλήθος.com "," Όνομα χρήστη "," κωδικός πρόσβασης ");
Οτι’είναι ο ίδιος κωδικός εσείς’έχουν ήδη γράψει, εκτός από το ότι απλά αφήνει το καλούπι μέρος.
Αλλά εδώ’είναι το πράγμα: Αφήστε αυτό καλούπι , Και όταν κάτι πάει στραβά, το σενάριό σας πρόκειται να καταρρεύσει και να παράσχει κάτι που’είναι είτε ένα πραγματικά άχρηστο σφάλμα, είτε κάτι τόσο κρυπτό που μπορείτε’t Ακόμη και λέω τι είναι. Για παράδειγμα, εάν αφήσετε έξω καλούπι , και εισαγάγετε έναν λάθος κωδικό πρόσβασης και εκτελέστε το σενάριό σας, εσείς’Λάβετε ένα σφάλμα παρόμοιο με το εξής:
Δεν είναι δυνατή η σύνδεση με τον τοπικό διακομιστή MySQL μέσω της υποδοχής/tmp/mysql.κάλτσα '(2)
Πιστέψτε το ή όχι, αυτό το μήνυμα σφάλματος είναι στην πραγματικότητα ένα αρκετά ενημερωτικό, καθώς τα πράγματα πάνε με λείπουν καλούπι δηλώσεις. Η προσθήκη ότι μια γραμμή χειρισμού σφαλμάτων μπορεί να κάνει μια τεράστια διαφορά για έναν χρήστη όταν τα πράγματα πάνε στραβά.
Στην πραγματικότητα, καθώς αρχίζετε να δημιουργείτε πολύ μεγαλύτερες εφαρμογές ιστού πλήρους, μπορείτε να ανακατευθύνετε τον χρήστη σας σε μια ωραία μορφοποιημένη σελίδα σφάλματος, συμπληρώστε με στοιχεία επικοινωνίας για έναν διαχειριστή και μια αναφορά σφάλματος με στυλ CSS. Αλλά τίποτα από αυτά δεν είναι δυνατό χωρίς καλούπι .
Τώρα, ξεπλύνετε με δύναμη PHP, ίσως ήδη νομίζετε ότι κάνετε πολύ λίγα σφάλματα. Μπορεί να το σκεφτείτε αυτό καλούπι είναι για ερασιτέχνες κατάταξης που δεν είναι’t γράψτε άψογο κωδικό. Δυστυχώς, όταν εσείς’επάνω στις 2 π.μ. προσπαθώντας να χτυπήσει μια προθεσμία, ώστε να μπορείτε να πληρώσετε, ο εγκέφαλός σας αρχίζει να μοιάζει, καλά… αυτό ενός ερασιτεχνικού βαθμού. Όλοι κάνουν λάθη και καλούπι (μαζί με άλλες τεχνικές χειρισμού σφαλμάτων) είναι ένας από αυτούς τους lifesavers που σας βοηθά να φαίνεστε προετοιμασμένοι και επαγγελματικοί όταν συμβαίνουν αυτά τα αναπόφευκτα λάθη.
Στην πραγματικότητα, οι προγραμματιστές υψηλότερου επιπέδου, οι υψηλότεροι πληρωμένοι στον κόσμο είναι γκουρού χειρισμού σφαλμάτων. Ταυτόχρονα, αυτοί’είναι πιθανώς δεν χρησιμοποιώντας καλούπι . Αυτοί’είναι πιο πιθανό να χρησιμοποιήσετε ένα πιο ισχυρό σύστημα χειρισμού σφαλμάτων. κάτι σαν το σφάλμα που σας χειρίζεται’LL Χρήση στο Κεφάλαιο 7. Προς το παρόν, όμως, μια υγιής και φιλελεύθερη χρήση του καλούπι θα σας βοηθήσει να συνηθίσετε να προσθέτετε σε μια μορφή χειρισμού σφαλμάτων.
Δίνεις mysql_select_db ένα όνομα βάσης δεδομένων και – το μαντέψατε – ΧΡΗΣΗ αυτή τη βάση δεδομένων ή επιστρέφει ψευδής . Ενημέρωση λοιπόν συνδέω-συωδεομαι.PHP προς την ΧΡΗΣΗ Η σωστή βάση δεδομένων:
Σφάλμα σύνδεσης με βάση δεδομένων: " . mysql_error () . «"); ηχώ "Συνδεδεμένο με το MySQL!
"?
mysql_select_db ("Your-Database-Name")
ή πέθανε("
Σφάλμα επιλογής της βάσης δεδομένων BMCLAUGH: " .
mysql_error () . «
");
ηχώ "
Συνδεδεμένο με το MySQL, χρησιμοποιώντας τη βάση δεδομένων BMClaugh.
"? ?>
Θα πρέπει ήδη να δείτε το μοτίβο. καλούπι Βεβαιωθείτε ότι αν συμβούν κακά πράγματα, το σενάριό σας αναφέρει ένα σφάλμα, οι χρήστες σας διαβάζουν αυτό το σφάλμα και στη συνέχεια εξέρχεται το σενάριο. Εάν τα πράγματα πάνε καλά, ένα άλλο ευτυχισμένο μήνυμα θα πρέπει να εκτυπωθεί.
Δοκιμάστε αυτή τη νέα έκδοση. Επίσκεψη συνδέω-συωδεομαι.HTML Και πάλι και προσπαθήστε να συνδεθείτε (και τώρα ΧΡΗΣΗ ) Η βάση δεδομένων σας. Θέλετε να δείτε κάτι σαν το σχήμα 4-3. Επόμενο: μιλώντας SQL στη βάση δεδομένων σας.
Εικόνα 4-3. Για άλλη μια φορά, μερικές απλές λέξεις και σημαντικά πράγματα συμβαίνουν πίσω από τις σκηνές. Το σενάριό σας έχει τώρα μια σύνδεση με το MySQL και χρησιμοποιεί τη σωστή βάση δεδομένων.
Δείξτε τη βάση δεδομένων σας’πινάκων
Τώρα που εσύ’έχω μια σύνδεση και εσύ’Επαναφέρετε στη σωστή βάση δεδομένων, θα πρέπει να δείτε ακριβώς τι εσείς’Έπρεπε να δουλέψω. Στο εργαλείο μου MySQL, ένα από τα πρώτα πράγματα που κάνατε ήταν να δείτε ποια πίνακες υπήρχαν και στη συνέχεια να αρχίσετε να δημιουργείτε τραπέζια δικών σας. Εκεί’είναι κάποια ακόμη δουλειά για να δημιουργήσετε τραπέζια και εσείς’Θα το κάνω λίγο, με μια νέα μορφή HTML και ένα νέο σενάριο.
Αλλά πριν από την κατάδυση σε αυτό, μπορείτε εύκολα να έχετε το σενάριό σας να δείτε ποιοι πίνακες είναι διαθέσιμοι στη βάση δεδομένων σας. Ανοίγω συνδέω-συωδεομαι.PHP Και πάλι, και προσθέστε την ακόλουθη γραμμή:
$ αποτέλεσμα = mysql_query ("Πίνακες εμφάνισης;");
?>
Εδώ’είναι μια άλλη νέα λειτουργία PHP-to-MYSQL: mysql_query . Εσείς’θα γίνω πολύ, πολύ εξοικειωμένος με αυτό. το’είναι το κλειδί για να περάσετε το SQL στη βάση δεδομένων σας. Αυτή η λειτουργία παίρνει το SQL και εσείς’Έδωσε κάποια πραγματικά απλή SQL:
Εμφάνιση πινάκων?
Αυτή η εντολή είναι ακριβώς Όπως πληκτρολογώντας το SQL στο εργαλείο γραμμής εντολών.
Χειρισμός σφαλμάτων βλέποντας εάν τα αποτελέσματά σας δεν είναι
Αλλά τι γίνεται καλούπι ? Τι γίνεται με το χειρισμό σφαλμάτων? Εκεί’δεν είναι τίποτα από αυτό, και μέχρι τώρα, ξέρετε ότι πρέπει να υπάρχει. Αλλά εκεί’είναι κάτι διαφορετικό για αυτήν τη γραμμή: ό, τι επιστρέφει mysql_query είναι γεμιστό σε μια μεταβλητή που ονομάζεται $ αποτέλεσμα .
Έτσι’είναι πραγματικά $ αποτέλεσμα που θέλετε να εξετάσετε. Θα πρέπει είτε να έχει μια λίστα πινάκων, από Εμφάνιση πινάκων , ή’s αναφορά ενός σφάλματος κάποιου είδους. Και αν είναι’να αναφέρετε ένα σφάλμα, λοιπόν $ αποτέλεσμα είναι ψευδές, επειδή το mysql_ Οι λειτουργίες επιστρέφουν ψευδείς όταν εκεί’είναι ένα πρόβλημα.
Ξέρετε πώς να ελέγξετε για μια ψευδή τιμή, όμως, έτσι μπορείτε να προσθέσετε αυτόν τον κωδικό για να χειριστείτε προβλήματα:
αν ($ αποτέλεσμα === false) καλούπι("
Σφάλμα στους πίνακες καταχώρισης: " . mysql_error () . «
");
>
?>
Τώρα, αυτό λειτουργεί, αλλά αυτό’δεν είναι πραγματικά πώς οι περισσότεροι προγραμματιστές PHP κάνουν τα πράγματα. ο === είναι ένα αρκετά ασυνήθιστο πράγμα που πρέπει να χρησιμοποιήσετε στην PHP, τουλάχιστον για τον έλεγχο για να δείτε αν μια μεταβλητή είναι ψευδής. Τι’είναι πιο συνηθισμένο - και ο τρόπος που αυτό’Το S συνήθως γίνεται στο PHP - είναι να χρησιμοποιήσει τον χειριστή άρνησης (που ονομάζεται επίσης χειριστής Bang), ο οποίος είναι ένα θαυμαστικό: ! . Έτσι, αν θέλετε να δείτε αν μια μεταβλητή που ονομάζεται $ κάποια μεταβλητή είναι ψευδές, μπορείτε να πείτε αν (!$ κάποια μεταβλητή) . Και αυτό ! λέει κάτι σαν, “αν $ κάποια μεταβλητή είναι ψευδές.”
Ακόμα καλύτερα, σκεφτείτε ! ως “δεν.” Λοιπόν, αυτό που πραγματικά θέλετε να πείτε στον κωδικό σας είναι, “Αν όχι $ αποτέλεσμα , τότε πεθαίνω.” Κατά συνέπεια, μπορείτε να ξαναγράψετε τον κωδικό σας για να μοιάζετε με αυτό:
αν (!$ αποτέλεσμα) καλούπι("
Σφάλμα στους πίνακες καταχώρισης: " . mysql_error () . «
");> ?>
Αυτό το είδος κώδικα είναι πολύ καλύτερο PHP, και τώρα εσείς’έχουν καλυφθεί προβλήματα.
Σημείωση
Μπορεί να φαίνεται περίεργο να ακούσουμε “ο τρόπος’Έγινε στο PHP.” Εάν ο κωδικός λειτουργεί, τότε λειτουργεί, σωστά? Λοιπόν, ναι… αλλά έχετε ακούσει ποτέ κάποιον που’απλά μαθαίνοντας αγγλικά μιλούν? Συχνά, τα λόγια τους είναι σωστά, αλλά η σειρά, η χρήση και το ιδίωμα είναι λάθος. Δοκιμάστε και εξηγήστε γιατί περισσότερα από ένα πρόβατα εξακολουθούν να είναι απλά “πρόβατο,” και εσύ’έχω την ιδέα.
Οι γλώσσες προγραμματισμού είναι οι ίδιες. Εκεί’S Κωδικός γραφής που λειτουργεί και εκεί’S Κωδικός γραφής που μοιάζει να γνωρίζετε τη γλώσσα. Μερικές φορές αυτό ονομάζεται ύπαρξη εύγλωττος . Υπάρχουν πραγματικά μερικά υπέροχα βιβλία για “Μιλώντας σωστά” στο Javascript και στο Ruby κάλεσε Εύγλωττος Javascript (Marijn Haverbeke, No αμύλες) και Εύγλωττος ρουμπίνι (Russ Olsen, Addison Wesley). Το’Αξίζει να μάθετε όχι μόνο πώς να γράψετε το PHP εργασίας, αλλά να γράψετε PHP που φαίνεται φυσική.
Στην πραγματικότητα, μόνο για να βεβαιωθείτε ότι ο κώδικας σας ασχολείται με σφάλματα, αλλάξτε το ερώτημά σας SQL για να έχετε ένα ορθογραφικό ορθογραφικό ορθογραφικό ορθογραφικό:
$ αποτέλεσμα = mysql_query ("εμφανίζονται πίνακες;");
αν (!$ αποτέλεσμα) < die("Σφάλμα στους πίνακες καταχώρισης: " . mysql_error () . «
");> ?>
Τώρα φορτώστε συνδέω-συωδεομαι.HTML σε ένα πρόγραμμα περιήγησης και εκτελέστε το τεστ σύνδεσής σας. Το σχήμα 4-4 είναι παρόμοιο με αυτό που πρέπει να δείτε: Ακόμα λίγο κρυπτικό, αλλά σαφώς μια περίπτωση όπου ο κώδικας σας συνειδητοποίησε ότι υπήρχε ένα πρόβλημα και το χειρίστηκε με ένα μήνυμα σφάλματος και όχι με μια μαζική κατάρρευση.
Εικόνα 4-4. Αντιμετωπίστε σφάλματα σε κάθε βήμα κατά μήκος του δρόμου. Όσο καλύτερα χειρίζεστε σφάλματα και όσο πιο συγκεκριμένα είναι τα μηνύματά σας, τόσο πιο εύκολο είναι να καταλάβετε τι’Πήγαμε στραβά με τον κωδικό σας. Αυτό σημαίνει κώδικα που λειτουργεί καλά για τους χρήστες σας και ότι μπορείτε εύκολα να διορθώσετε όταν εμφανίζονται σφάλματα.
Εκτύπωση των αποτελεσμάτων SQL
Χειρίζονται σφάλματα, αναφέρονται προβλήματα και τώρα μπορείτε τελικά να αντιμετωπίσετε τι’στην πραγματικότητα μέσα $ αποτέλεσμα Όταν τα πράγματα’Δεν πάει λάθος. Δυστυχώς, τα πράγματα γίνονται λίγο πιο δύσκολα εδώ. $ αποτέλεσμα Στην πραγματικότητα δεν είναι τύπου PHP’έχουν χρησιμοποιήσει, ή ακόμα και ένα που εσείς’Θα πρέπει να μάθω πώς να δουλεύεις απευθείας. Το’είναι κάτι που ονομάζεται α πόρος , που είναι php-speak για μια ειδική μεταβλητή που’που σχετίζονται με κάτι έξω από την PHP.
Σκεφτείτε το έτσι: στην περίπτωση του mysql_query , εσείς’ζήτησαν τα αποτελέσματα SQL από τη λειτουργία του ερωτήματος Εμφάνιση πινάκων . Αλλά ενώ η PHP μπορεί να μιλήσει με το MySQL, πραγματικά δεν το κάνει’δεν ξέρω πώς να ερμηνεύσω το SQL. Έτσι μπορεί’το ξέρω ότι $ αποτέλεσμα θα πρέπει να κρατήσει μια λίστα με σειρές, καθένα από τα οποία με μία τιμή: ένα όνομα πίνακα. Το μόνο που ξέρει είναι ότι κάτι άλλο - η βάση δεδομένων MySQL - παίρνει ένα ερώτημα μέσω του mysql_query λειτουργία. Και σκεφτείτε το: ανάλογα με το ερώτημα που περνάτε mysql_query, $ αποτέλεσμα Μπορεί να κρατάει σειρές με πολλαπλές πληροφορίες, όπως ένα όνομα και URL Facebook, ή απλώς μια ένδειξη για το αν Δημιουργία πίνακα η δήλωση λειτούργησε ή όχι.
Έτσι σε αυτές τις περιπτώσεις, καταλήγετε συνήθως σε έναν πόρο PHP. Αυτός ο πόρος σημαίνει κάτι ; το’είναι ακριβώς αυτό το php δεν’Δεν ξέρω πραγματικά τι είναι κάτι τέτοιο. Έτσι, το PHP σας χρειάζεται βοήθεια. Αυτό που χρειάζεται είναι κάτι που ξέρει για το MySQL και μπορεί να καταλάβει πώς να εργαστεί $ αποτέλεσμα . Οτι’είναι ακριβώς αυτό που παίρνετε με μια άλλη λειτουργία MySQL, mysql_fetch_row . Μεταφέρετε αυτήν τη λειτουργία σε έναν πόρο που επιστρέφεται από mysql_query , Και σας επιτρέπει να περνάτε από κάθε σειρά στα αποτελέσματα που επιστρέφονται από το ερώτημά σας SQL.
Εδώ’είναι το βασικό μοτίβο:
- Γράψτε το ερώτημά σας SQL και αποθηκεύστε το σε μια συμβολοσειρά ή μια μεταβλητή.
- Περάστε το ερώτημά σας σε mysql_query Και επιστρέψτε έναν πόρο PHP.
- Περάστε αυτόν τον πόρο σε mysql_fetch_row Για να επιστρέψετε σειρές αποτελεσμάτων, μία κάθε φορά.
- Περικοπή σε αυτές τις σειρές και τραβήξτε τις πληροφορίες που χρειάζεστε.
- Αγοράστε μια πολύ ωραία κιθάρα με όλα τα μετρητά’παρασκευή.
Σημείωση
Αυτό το τελευταίο βήμα είναι προαιρετικό, αλλά συνιστάται ιδιαίτερα.
Εσείς’έχω έναν πόρο στο $ αποτέλεσμα , Έτσι τώρα περάστε το στο mysql_fetch_row , σαν αυτό:
Προειδοποίηση
Εάν αλλάξατε το SQL σας Εμφανίζονται πίνακες Για να δημιουργήσετε ένα σφάλμα όπως περιγράφεται στο χειρισμό σφαλμάτων, βλέποντας εάν τα αποτελέσματά σας δεν είναι, βεβαιωθείτε και αλλάξτε το πίσω στο Working SQL: Εμφάνιση πινάκων .
Ακόμα κι αν η PHP δεν’δεν ξέρω τι να κάνει με τον πόρο που επιστρέφεται από mysql_query, mysql_fetch_row κάνει. Παίρνει το δικό σας $ αποτέλεσμα πόρος και αρχίζει να φτύνει τις σειρές, μία κάθε φορά, σε μια συστοιχία.
Και έπειτα εκεί’έτσι ενώ Loop, το οποίο είναι επίσης νέο, αλλά πιθανότατα έχει ήδη νόημα για εσάς. ΕΝΑ ενώ Ο βρόχος συνεχίζει να βρόχος όσο κάτι είναι αλήθεια. Σε αυτή την περίπτωση, ο βρόχος συνεχίζει να βρόχο ενώ $ σειρά -Πώς είναι η επόμενη σειρά αποτελεσμάτων από το ερώτημά σας SQL - παίρνει μια αξία από mysql_fetch_row ($ αποτέλεσμα) . Όταν δεν υπάρχουν περισσότερες σειρές αποτελεσμάτων, mysql_fetch_row δεν’να επιστρέψω οτιδήποτε, έτσι $ σειρά είναι άδειο και το ενώ λέει ο βρόχος, “Εντάξει, εγώ’τέρμος. Εγώ’Θα σταματήσω τώρα.”
Και εσύ’Έχεις μια ωραία λίστα ( ul ) έτοιμο να φτύνει κάθε σειρά, έτσι εκεί’είναι μόνο ένα πράγμα που πρέπει να προσθέσει:
Αυτός ο κώδικας θα πρέπει να αρχίσει να φαίνεται γνωστός ξανά. Κάθε φορά mysql_fetch_row επιστρέφει $ σειρά , το’να επιστρέφει πραγματικά έναν πίνακα, κάτι που εσύ’βλέπετε πριν (η μεταβλητή $ _request). Αυτός ο πίνακας έχει όλα τα διαφορετικά στοιχεία από το ερώτημά σας SQL. Για Εμφάνιση πινάκων , ότι’είναι μόνο ένα πράγμα, στο $ ROW [0] : Το όνομα του πίνακα. Πολύ σύντομα, εσύ’Θα γράψω μερικά πιο πολύπλοκα ερωτήματα και ίσως χρειαστεί να πάρετε την αξία $ ROW [1] ή $ ROW [2] ή ακόμη και $ ROW [10] .
Σε αυτήν την περίπτωση, επιστρέφετε $ σειρά , Πιάσε το όνομα του πίνακα με το να πάρει το πρώτο στοιχείο στον πίνακα, στο Index 0, και στη συνέχεια να το εκτυπώσετε με ηχώ . Εκεί’είναι μόνο μία άλλη ρυτίδα εδώ: Αυτά τα σγουρά τιράντες μέσα στη συμβολοσειρά που πέρασε στην Echo. Τι’με αυτά?
Λοιπόν, θα μπορούσατε να ξαναγράψετε αυτή τη γραμμή όπως αυτή:
Τίποτα δεν είναι λάθος εκεί, εκτός από όλα τα επιπλέον εισαγωγικά και περίοδο για να κολλήσετε τις χορδές μαζί.
Σημείωση
Σημαντικά σημεία Nerd, αν θυμάστε ότι οι χορδές που παίζουν μαζί ονομάστηκαν Concatenation (συνδυάζοντας κείμενο).
Αλλά η PHP είναι αρκετά καταλαβαίνω και οι λαοί που έγραψαν τη γλώσσα είναι προγραμματιστές, επίσης. Συνειδητοποίησαν, όπως εσείς, ότι εσείς’Αναπτύξτε συνεχώς μεταβλητές στη μέση των χορδών. Έτσι, αντί να τερματίζετε συνεχώς μια συμβολοσειρά και να προσθέσετε μια μεταβλητή, μπορείτε απλά να τυλίξετε μια μεταβλητή μέσα του < >, και η PHP θα εκτυπώσει την τιμή αυτής της μεταβλητής αντί για “$ ROW [0]”. Κάνει πολύ απλούστερο κώδικα και αυτό’είναι καλό πράγμα.
Αποθηκεύσετε συνδέω-συωδεομαι.PHP , επισκέπτομαι πάλι συνδέω-συωδεομαι.HTML στο πρόγραμμα περιήγησής σας και δείτε τι πίνακες σας’Έφτασα στη βάση δεδομένων σας. Το σχήμα 4-5 είναι συνδέω-συωδεομαι.PHP Τρέχοντας σε μια βάση δεδομένων με πολλά τραπέζια. Μπορεί να έχετε μόνο ένα ή δύο, και αυτό’είναι μια χαρά. Απλά βεβαιωθείτε ότι βλέπετε μια λίστα με τα τραπέζια σας.
Εικόνα 4-5. Η εμφάνιση πίνακα αποδεικνύεται αρκετά άχρηστος σε ένα πρόγραμμα περιήγησης αρκετά γρήγορα. Αυτό το αποτέλεσμα μπορεί να μοιάζει με τεράστιο αριθμό πινάκων, αλλά εσείς’είναι πιθανό να γράφετε εφαρμογές ιστού που διαθέτουν 20, 30 ή ακόμα και 100 πίνακες σε μία εφαρμογή. Προς το παρόν, όμως, αυτό’είναι ένας πολύ εύκολος τρόπος για να βεβαιωθείτε ότι τα σενάρια PHP σας μιλάνε στις βάσεις δεδομένων MySQL.
Καθαρισμός του κωδικού σας με πολλά αρχεία
Ακόμα κι αν δεν κάνετε’να το συνειδητοποιήσω ακόμα, εκεί’είναι κάτι προβληματικό για το δικό σας συνδέω-συωδεομαι.PHP γραφή. Κοιτάξτε τις πρώτες μερικές κλήσεις MySQL που κάνετε:
mysql_connect (".βάση δεδομένων.πλήθος",
"Your-username", "Your-Password")
ή πέθανε("Σφάλμα σύνδεσης με βάση δεδομένων: " . mysql_error () . «
"); ηχώ "
Συνδεδεμένο με το MySQL!
"?
mysql_select_db ("Your-Database-Name")
ή πέθανε("Σφάλμα επιλογής της βάσης δεδομένων BMCLAUGH: " . mysql_error () . «
"); ηχώ "
Συνδεδεμένο με το MySQL, χρησιμοποιώντας τη βάση δεδομένων BMClaugh.
"; // Και ούτω καθεξής. ?>
Εσείς’Επαναφέρετε με μη αυτόματο τρόπο τον κεντρικό υπολογιστή της βάσης δεδομένων, το όνομα χρήστη, τον κωδικό πρόσβασής σας και το όνομα της βάσης δεδομένων σας στο σενάριό σας. Τώρα υποθέστε ότι έχετε 10 σενάρια και εσείς’πληκτρολογώντας αυτό 10 φορές. Η πιθανότητα ενός τυπογραφικού είναι αρκετά υψηλή.
Όχι μόνο αυτό, τι συμβαίνει όταν αλλάζετε τον κωδικό πρόσβασής σας? Ή αναβαθμίζετε σε ένα καλύτερο σχέδιο φιλοξενίας για να χειριστείτε όλη την κυκλοφορία ιστού που δημιουργούν οι εφαρμογές σας και πρέπει να αλλάξετε τον κεντρικό υπολογιστή της βάσης δεδομένων σας? Εσείς’Έχετε να εντοπίσετε κάθε τόπο που βάζετε αυτές τις πληροφορίες, σε κάθε σενάριο PHP. Οτι’είναι ένας εφιάλτης και σας εμποδίζει να γράψετε πραγματικά νέο κωδικό και να κάνετε περισσότερα μετρητά. ΟΧΙ καλα.
Χρειάζεστε έναν τρόπο αφηρημένα Αυτά τα στοιχεία πληροφοριών. Η αφαίρεση είναι ένας όρος προγραμματισμού που σημαίνει απόκρυψη της εφαρμογής, ο τρόπος που λειτουργεί κάτι (όπως ένας κωδικός πρόσβασης), από τα προγράμματα που το χρησιμοποιούν. Έχετε βασικά ένα σύμβολο ή ένα όνομα και αυτό το όνομα αναφέρεται σε κάτι άλλο με πολύ περισσότερες λεπτομέρειες. Και ακόμα κι αν αλλάξει η λεπτομέρεια, το όνομα εξακολουθεί να δείχνει το σωστό.
Το’σαν να λέω “Χερσαίως,” και δηλαδή τη γυναίκα μου, χωρίς να λέει, “Αυτή η καυτή 34χρονη γυναίκα με μικρά ξανθά μαλλιά και υπέροχα πόδια.” Και η ομορφιά του “Χερσαίως” είναι κάθε γενέθλια, μπορείτε να συνεχίσετε να λέτε, “Χερσαίως,” Αντί να αλλάξετε την περιγραφή σας.
Αντικατάσταση τιμών με χειροκίνητα με μεταβλητές
Ας υποθέσουμε λοιπόν ότι θέλετε ο κωδικός σας να μοιάζει περισσότερο με αυτό (στην πραγματικότητα, εσείς πραγματικά κάνω Θέλετε να μοιάζει περισσότερο με αυτό):
mysql_connect ($ database_host, $ username, $ password)
ή πέθανε("Σφάλμα σύνδεσης με βάση δεδομένων: " . mysql_error () . «
"); ηχώ "
Συνδεδεμένο με το MySQL!
"?
mysql_select_db ($ database_name)
ή πέθανε("Σφάλμα επιλογής της βάσης δεδομένων BMCLAUGH: " . mysql_error () . «
"); ηχώ "
Συνδεδεμένο με το MySQL, χρησιμοποιώντας τη βάση δεδομένων BMClaugh.
"; // Και ούτω καθεξής. ?>
Ολοι εσείς’Το να γράφεις κάτι που μοιάζει λίγο με μια μεταβλητή στη θέση του χειρός τύπου το όνομα χρήστη ή το όνομα της βάσης δεδομένων. Τώρα μπορείτε να ορίσετε αυτές τις μεταβλητές πάνω από τον κωδικό σύνδεσης:
$ database_host = "σας.βάση δεδομένων.πλήθος";
$ $ username = "το όνομα σας-username";
$ password = "Your-Password";
$ database_name = "Your-Database-Name";
// κωδικός σύνδεσης βάσης δεδομένων ?>
Αλλά είναι αυτό πολύ καλύτερο? Οχι ακόμα; εσείς’εξακολουθούν να έχουν αυτές τις ίδιες τιμές με το χέρι στο σενάριό σας. Θέλετε να κολλήσετε τις τιμές σε ένα αρχείο, οπότε κανένας άνθρωπος δεν πρέπει να τις πληκτρολογήσει. Συνέχισε να διαβάζεις.
Αφαίρεση σημαντικών τιμών σε ξεχωριστό αρχείο
Ο στόχος σας είναι να βγάλετε αυτές τις αξίες από συνδέω-συωδεομαι.PHP , σε κάποιο μέρος που όλα τα σενάρια PHP σας μπορούν να έχουν πρόσβαση σε αυτά χωρίς πληκτρολόγηση από εσάς. Ανοίξτε ένα νέο αρχείο και καλέστε το app_config.PHP . Τώρα αφήστε τις μεταβλητές σας σε αυτό το νέο αρχείο:
Σημείωση
Να είστε σίγουροι και να αποθηκεύσετε app_config.PHP κάπου που έχει νόημα για όλη την αίτησή σας’scripts για πρόσβαση σε αυτό. Σε αυτό το βιβλίο’παραδείγματα, app_config.PHP βρίσκεται στη ρίζα του χώρου, κάτω σενάρια/ . Έτσι, αν εσείς’re στο CH04/σενάρια/ Κατάλογος, εσύ’Δ Πρόσβαση σε αυτό το αρχείο στο ../../σενάρια/app_config.PHP , ή [site_root]/scripts/app_config.PHP . Μπορείτε να αποθηκεύσετε το αρχείο όπου θέλετε, αρκεί να πάρετε τη διαδρομή ακριβώς στα σενάρια PHP που το αναφέρονται.
Όταν μετακομίζετε σε μια έκδοση παραγωγής της αίτησής σας, πιθανότατα θέλετε να τοποθετήσετε αυτό το αρχείο έξω από τη ρίζα του ιστότοπου. Με αυτόν τον τρόπο, οι χρήστες του Ιστού μπορούν’t απλά πληκτρολογήστε τη διαδρομή στο σενάριο διαμόρφωσης και λάβετε όλους τους κωδικούς πρόσβασής σας. Εναλλακτικά, θα μπορούσατε να προσθέσετε ασφάλεια σε αυτόν τον κατάλογο, αν και απλά να το βγείτε από τους καταλόγους που εξυπηρετούν το διαδίκτυο είναι συνήθως ευκολότερη.
Τώρα, μπορείτε να έχετε όλα τα διαφορετικά σας σενάρια PHP χρησιμοποιούν αυτές τις κοινές μεταβλητές. Αλλάξτε μια μεταβλητή εδώ app_config.PHP , Και αυτή η αλλαγή επηρεάζει όλα τα σενάρια PHP που χρησιμοποιούν αυτές τις κοινές μεταβλητές.
Αλλά πώς έχετε πραγματικά πρόσβαση σε αυτές τις μεταβλητές? Επιστρέφω συνδέω-συωδεομαι.PHP , και αφαιρέστε πού καθορίσατε αυτές τις μεταβλητές μόνοι σας. Εάν προσπαθήσετε να αποκτήσετε πρόσβαση συνδέω-συωδεομαι.PHP διά μέσου συνδέω-συωδεομαι.HTML Τώρα, όμως, εσύ’Λάβετε ένα δυσάρεστο σφάλμα, όπως φαίνεται στο βλέπε σχήμα 4-6.
Εικόνα 4-6. Ορίσατε τις μεταβλητές σας στο app_config. PHP, αλλά συνδεθείτε.Η PHP δεν’Το ξέρω αυτό. Πρέπει να πείτε στο σενάριο σύνδεσής σας ότι πρέπει’να τρέχει μέχρι να φορτώσει app_config.PHP. Τότε τα πράγματα θα συμπεριφέρονται, επειδή οι μεταβλητές συνδέονται.Οι χρήσεις PHP θα ρυθμιστούν σωστά.
Το σφάλμα συμβαίνει επειδή συνδέω-συωδεομαι.PHP τώρα δεν έχει ιδέα τι $ username ή $ κωδικός πρόσβασης αναφέρεται σε. Πρέπει να ενημερώσετε την PHP ότι πριν προσπαθήσει να κάνει οτιδήποτε συνδέω-συωδεομαι.PHP , το’S Απαιτούνται για φόρτωση app_config.PHP . Και αυτό’S (σχεδόν) ακριβώς αυτό που πληκτρολογείτε στο σενάριο σας:
απαιτείται../../σενάρια/app_config.php ';
// κωδικός σύνδεσης βάσης δεδομένων ?>
Τώρα, η PHP φορτώνει το αρχείο ../../σενάρια/app_config.PHP πριν τρέχει το δικό σας mysql_connect λειτουργία. Στην πραγματικότητα, απαιτώ λέει, “Γεια PHP, αν μπορείτε’t Φορτώστε το αρχείο i’m Δίνοντας, στη συνέχεια ρίξτε ένα δυσάρεστο λάθος, γιατί τίποτα άλλο δεν πρόκειται να λειτουργήσει.”
Προειδοποίηση
Βεβαιωθείτε ότι η διαδρομή και το όνομα αρχείου που δίνετε απαιτώ ταιριάζει όπου βάζετε πραγματικά app_config.PHP , ή εσύ’θα δείτε το σφάλμα ότι απαιτώ δημιουργεί κοντά και προσωπικά.
Δοκιμάστε και εκτελέστε ξανά το σενάριο σύνδεσης και θα πρέπει να δείτε την καταχώρισή σας, πράγμα που σημαίνει ότι τα πράγματα λειτουργούν ξανά καλά.
Κάτω από την κουκούλα: απαιτήστε ή συμπεριλάβετε?
Εκεί’είναι μια άλλη εντολή στο PHP που’είναι πολύ παρόμοια με απαιτώ : περιλαμβάνω. περιλαμβάνω κάνει ακριβώς τι απαιτώ κάνει από την άποψη της λέξης της PHP να φορτώσει ένα άλλο αρχείο. Η διαφορά είναι ότι αν αυτό το αρχείο μπορεί’να φορτωθεί, περιλαμβάνω Απλά εκδίδει μια προειδοποίηση και αφήνει την PHP να συνεχίσει να τρέχει τις μεταγενέστερες εντολές στο σενάριό σας. Με άλλα λόγια, απαιτώ κλείνει εντελώς τα πράγματα, αλλά περιλαμβάνω ας συνεχίσει το σενάριό σας.
Αλλά εδώ’είναι το πράγμα. Είσαι Πραγματικά θα ασχοληθούμε με ένα αρχείο αν δεν κάνετε’Δεν χρειάζομαι αυτό το αρχείο? Στις περισσότερες περιπτώσεις, πιθανότατα όχι. Και εσύ’Συμπεριλαμβάνεται αυτό το αρχείο επειδή το χρειάζεστε. εσείς απαιτώ αυτό το αρχείο για εκτέλεση. Έτσι σε σχεδόν κάθε περίπτωση, θα πρέπει να χρησιμοποιήσετε απαιτώ Για να πάρετε ένα άλλο αρχείο, όχι περιλαμβάνω . Εάν κάτι πάει στραβά, θέλετε να το μάθετε. Εσύ’Δεν θέλω το υπόλοιπο του κώδικα σας να τρέξει, γιατί’είναι πιθανώς απλά να πηγαίνετε σε λάθος ούτως ή άλλως.
Οι μεταβλητές ποικίλλουν, αλλά οι σταθερές παραμένουν σταθερές
Εκεί’είναι μόνο ένα ακόμη κακό πρόβλημα με τον κωδικό σας: εσείς’Χρησιμοποιείτε ακόμα μεταβλητές για το όνομα χρήστη και τον κωδικό πρόσβασής σας, μαζί με τον κεντρικό υπολογιστή βάσης δεδομένων και το όνομα της βάσης δεδομένων. Και τι’είναι μια μεταβλητή? Κάτι που ποικίλλει ή αλλάζει. Κατά συνέπεια, η PHP σας επιτρέπει να γράψετε τον ακόλουθο κωδικό στο συνδέω-συωδεομαι.PHP :
mysql_connect ($ database_host, $ username, $ password) ή να πεθάνει ("Σφάλμα σύνδεσης με βάση δεδομένων: " . mysql_error () . «
"); // Αυτό επιτρέπεται, αλλά μερικοί κακοί κωδικοί πρόσβασης Mojo $ =" hijinks ";
Λοιπόν, τι συμβαίνει όταν κάποιο άλλο σενάριο - που απαιτεί επίσης app_config.PHP -Το να συνδεθείτε με mysql_connect ? Το’πρόκειται να χρησιμοποιήσει $ κωδικός πρόσβασης , αλλά τώρα $ κωδικός πρόσβασης isn’t Διορθώστε πια. Το’σε ορισμένα “γειαία,” και το χάος θα προκύψει.
Αυτό που πραγματικά θέλετε είναι για αυτές τις αξίες app_config.PHP να είσαι σταθερός και να μην αλλάξεις ποτέ. Μπορείτε να το κάνετε αυτό με το ειδικό καθορίζω λειτουργία. Ανοίγω app_config.PHP Και αλλάξτε τον κωδικό σας:
καθορίστε ("database_host", "το δικό σας.βάση δεδομένων.πλήθος");
καθορίστε ("database_username", "your-username");
καθορίστε ("database_password", "your-password");
καθορίστε ("Database_Name", "Your-Database-Name");
?>
Ορίζετε το όνομα μιας σταθεράς και την τιμή για αυτή τη σταθερά και η 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, χρησιμοποιώντας τη βάση δεδομένων " . ΟΝΟΜΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ . «
"? // SQL ΕΡΓΑΣΙΑ ΕΡΓΑΣΙΑΣ. ?>
Προειδοποίηση
Μπορείς’t Χρησιμοποιήστε το Μέσα στα αποσπάσματα σας για να εκτυπώσετε σταθερές. Το’μόνο όταν περιβάλλετε μια μεταβλητή (η οποία ξεκινά με $ ) με ότι η PHP εκτυπώνει την τιμή αυτής της μεταβλητής. Αντ 'αυτού, χρησιμοποιήστε την κανονική προσέγγιση συγκόλλησης συμβολοσειράς όπου τερματίζετε τη συμβολοσειρά σας και προσθέστε τις σταθερές χρησιμοποιώντας το dot (.), όπως συζητήθηκε για το συνδυασμό κειμένου.
Δοκιμάστε συνδέω-συωδεομαι.PHP πάλι. Θα πρέπει να πάρετε μια τέλεια καλή λίστα με ονόματα πίνακα. Αλλά αυτή τη φορά, εσύ’Έχουν σταθερές για τις σημαντικές σας πληροφορίες, με ασφαλώς κρυμμένα σε ένα αρχείο χωρισμένο από συνδέω-συωδεομαι.PHP .
Σημείωση
Το’είναι επίσης μια καλή ιδέα να προσθέσετε κάποια πρόσθετη ασφάλεια app_config.PHP , και οποιαδήποτε άλλα σενάρια που περιέχουν ειδικές τιμές όπως κωδικούς πρόσβασης. Μπορείτε να ορίσετε τα δικαιώματα στο αρχείο να είναι πιο περιοριστικά ή να μετακινήσετε το αρχείο σε κάποιο σημείο το σενάριο PHP σας μπορεί να έχει πρόσβαση, αλλά οι χρήστες του διαδικτύου σας μπορούν’Τ. Ρωτήστε τον διαχειριστή ιστού ή διακομιστή σας για βοήθεια εάν εσείς’Δεν είστε σίγουροι πώς να το κάνετε αυτό.
Χρόνος σχεδίασης: Ξεκινήστε μικρό, προσθέστε μικρό, τελειώστε μικρό
Μπορεί να αναρωτιέστε γιατί θα μπορούσατε’μόλις ξεκίνησα με app_config.PHP , και την ολοκληρωμένη έκδοση εργασίας του συνδέω-συωδεομαι.PHP . Ή, τουλάχιστον, θα μπορούσατε να έχετε μόλις πετάξει όλο τον κωδικό σύνδεσης βάσης δεδομένων συνδέω-συωδεομαι.PHP ταυτόχρονα, και στη συνέχεια έκανε τον κωδικό εκτύπωσης ταυτόχρονα. Isn’ότι πώς οι πραγματικοί προγραμματιστές γράφουν κωδικό?
Λοιπόν, ναι και όχι. Πολλοί προγραμματιστές γράφουν κωδικό έτσι. Πληκτρολογούν 10 ή 20 ή 50 γραμμές κώδικα στο σενάριό τους και στη συνέχεια δοκιμάστε το. Πολλά πράγματα θα σπάσουν, επειδή οι προγραμματιστές πληκτρολογούν πολύ γρήγορα και κάνουν λάθη. Αλλά τότε’θα διορθώσω κάθε πρόβλημα, ένα προς ένα προς ένα. Και για πολλούς προγραμματιστές, αυτό’είναι μια χαρά.
Αλλά εδώ’είναι το πράγμα: αυτό’Δεν είναι ένας πολύ αποτελεσματικός τρόπος εργασίας. Πάνω από αυτό, εσύ’Επικεντρώθηκε συνήθως στο τελευταίο βήμα (όπως η εκτύπωση των πινάκων), και έτσι δεν μπορείτε να περάσετε πολύ χρόνο για να υπολογίσετε τον καλύτερο τρόπο για να χειριστείτε τα ενδιάμεσα βήματα. Μπορεί να μην χρησιμοποιείτε Για να απλοποιήσετε τη δήλωση που εκτυπώνει $ ROW [0] , ή μπορείτε να παραλείψετε ένα καλούπι επειδή εσύ’Σκεφτείτε την έξοδο HTML, χωρίς να χειριστείτε την περίπτωση όπου ο κωδικός πρόσβασης της βάσης δεδομένων είναι’σωσμένος.
Οι καλύτεροι προγραμματιστές εργάζονται πραγματικά, πραγματικά μικρά κομμάτια κώδικα κάθε φορά. Δοκιμάζουν αυτόν τον κώδικα και στη συνέχεια μετακινούνται σε κάτι άλλο. Στην πραγματικότητα - και αυτό πηγαίνει λίγο πέρα από αυτό το βιβλίο, αλλά αυτό’είναι ακόμα σημαντικό - πολλοί πραγματικά ελίτ προγραμματιστές γράφουν πραγματικά δοκιμές πριν Γράφουν οτιδήποτε άλλο. Γράφουν αυτές τις δοκιμές και οι δοκιμές προφανώς αποτυγχάνουν, επειδή αποδίδουν’t γραμμένο οποιοδήποτε κωδικό. Στη συνέχεια, γράφουν αρκετό κώδικα για να περάσουν τη δοκιμή τους και στη συνέχεια γράφουν μια άλλη δοκιμή.
Αυτή η μέθοδος μπορεί να μην έχει πολύ νόημα στην αρχή. Γιατί να γράψετε δοκιμές για κώδικα που δεν κάνει’υπάρχει? Εδώ’τι’S πραγματικά καρύδια: Συχνά, αυτή η προσέγγιση έχει ως αποτέλεσμα περισσότερους κώδικες δοκιμής από τον πραγματικό κωδικό εφαρμογής! Το’είναι πολύ δουλειά, και αυτό’όλα με βάση την ιδέα ότι πρέπει να γράψετε αρκετό κώδικα για να πάρετε ένα πράγμα που λειτουργεί κάθε φορά.
Αλλά εδώ’είναι η μεγάλη αποκάλυψη και γιατί αυτοί οι ελίτ προγραμματιστές είναι ελίτ: Αυτή η πρώτη προσέγγιση δοκιμής έχει ως αποτέλεσμα τον καλύτερο κώδικα. Η εργασία μικρού, από την αρχή μέχρι το τέλος, σημαίνει εσείς’εστιάζοντας σε ένα πράγμα, και κάνοντας αυτό ένα πράγμα πολύ καλά. Εσύ’t βιασύνη σε κάτι άλλο. Και αυτό σημαίνει αυτό που εσύ’Η δουλειά είναι σταθερή και λειτουργεί. Αυτή η προσέγγιση απαιτεί περισσότερο χρόνο στην αρχή, αλλά έχει ως αποτέλεσμα τον κώδικα ροκ-στερεού που σπάει πολύ λιγότερο συχνά.
Πάρτε λοιπόν το χρόνο σας και δουλέψτε μικρά. Ο κωδικός σας θα είναι καλύτερος και οι πελάτες σας θα σας αγαπήσουν επειδή ο κωδικός σας εξακολουθεί να λειτουργεί ενώ’στο τηλέφωνο προσπαθώντας να λάβετε βοήθεια με μια σπασμένη εφαρμογή από “τα άλλα παιδιά.”
Δημιουργία βασικού δρομέα ερωτήματος SQL
Τώρα που μπορείτε να συνδεθείτε στο SQL, εσείς’Re είναι έτοιμος να αναλάβει κάτι πιο φιλόδοξο: Δημιουργία της δικής σας έκδοσης ενός εργαλείου γραμμής εντολών MySQL. Φυσικα εσυ’Πραγματοποιήστε προγραμματιστή και προγραμματιστής PHP τώρα, οπότε διανοητικά γρατζουνίστε “γραμμή εντολών” και αντικαταστήστε το με “διαδικτυακός.”
Αποδεικνύεται ότι εσείς’έχουν ήδη τα περισσότερα από τα εργαλεία που χρειάζεστε. Μπορείτε εύκολα να δημιουργήσετε μια φόρμα HTML που σας επιτρέπει σε εσάς και τους χρήστες σας να εισέλθουν σε ένα ερώτημα SQL, ξέρετε πώς να συνδεθείτε στο MySQL και να επιλέξετε μια βάση δεδομένων και μπορείτε να εκτελέσετε ένα ερώτημα. Ολα αυτά’αριστερά είναι να καταλάβουμε πώς να ερμηνεύσουμε αυτόν τον πόρο PHP που mysql_query επιστρέφει όταν’δεν είναι μια λίστα με ονόματα πίνακα.
Δημιουργία φόρμας HTML με ένα μεγάλο κενό κουτί
Πριν φτάσετε mysql_query Και τα αποτελέσματά του, όμως, ξεκινούν με αυτό που γνωρίζετε: μια φόρμα HTML. Κρατήστε τα πράγματα απλά για τώρα και απλά δημιουργήστε μια φόρμα με μια περιοχή κειμένου στην οποία μπορείτε να πληκτρολογήσετε ερωτήματα και μερικά βασικά κουμπιά.
Ανοίξτε τον επεξεργαστή κειμένου σας και δημιουργήστε queryrunner.HTML:
Php & MySQL: Το εγχειρίδιο που λείπει
Παράδειγμα 4-2Δρομέας ερωτήματος SQL
Εισαγάγετε το ερώτημά σας SQL στο παρακάτω πλαίσιο:
Πυροβολήστε το αγαπημένο σας πρόγραμμα περιήγησης και βεβαιωθείτε ότι τα πράγματα μοιάζουν με το σχήμα 4-7.
Εικόνα 4-7. Που είπαν ποτέ’t ξοδεύετε αρκετό χρόνο γράφοντας HTML και CSS όταν έγινε ένας πλήρης προγραμματιστής ιστού? Ακόμη και με έναν βασικό δρομέα ερωτήματος SQL, η καλή δομή και το στυλ κάνουν μια τεράστια διαφορά στην παρουσίαση και πόσο εύκολος είναι ο κωδικός σας να ενημερώσετε.
Σύνδεση στη βάση δεδομένων σας (ξανά)
Ξέρεις τι’S Next: Πρέπει να συνδεθείτε στο MySQL και στη συνέχεια ΧΡΗΣΗ Η βάση δεδομένων σας. Αυτός ο κώδικας πρέπει να είναι αρκετά εξοικειωμένος μέχρι τώρα. ανοίγω run_query.PHP Και πηγαίνετε στη δουλειά:
Σφάλμα σύνδεσης με βάση δεδομένων: " . mysql_error () . «"); ηχώ "Συνδεδεμένο με το MySQL!
"MySQL_SELECT_DB (DATABASE_NAME) ή DIE ("
Σφάλμα επιλογής της βάσης δεδομένων " . ΟΝΟΜΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ . mysql_error () . «
"); ηχώ "
Συνδεδεμένο με το MySQL, χρησιμοποιώντας τη βάση δεδομένων " . ΟΝΟΜΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ . «
"? ?>
Αλλά περιμένετε ... αυτό είναι οικείος. Εσείς’Έγραψε αυτόν τον κωδικό πριν, επιστρέφοντας στη βάση δεδομένων που θα χρησιμοποιηθεί και στην πραγματικότητα πρέπει να το γράψετε κάθε φορά που συνδέεστε με το MySQL. Αυτό το είδος της αλληλεπίδρασης είναι’καλά. Οτι’Γιατί μετακόμισε τις σταθερές της βάσης δεδομένων σας app_config.PHP : Θέλατε να είστε σε θέση να διατηρήσετε τον κώδικα που είναι πάντα ο ίδιος σε ένα μόνο μέρος, αντί για δέκα ή εκατό μέρη.
Εσείς’είδα πόσο εύκολο είναι απαιτώ ένα αρχείο (αφαίρεση σημαντικών τιμών σε ξεχωριστό αρχείο) και τραβήξτε μερικές σταθερές τιμές. Μπορείτε να κάνετε το ίδιο πράγμα με τον κωδικό σύνδεσης βάσης δεδομένων. Ανοίξτε ένα νέο αρχείο και καλέστε το database_connection.PHP . Αποθηκεύστε αυτό το νέο σενάριο δεξιά παράλληλα app_config.PHP , και πληκτρολογήστε τον ακόλουθο κωδικό:
Σφάλμα σύνδεσης με βάση δεδομένων: " . mysql_error () . «"); ηχώ "Συνδεδεμένο με το MySQL!
"MySQL_SELECT_DB (DATABASE_NAME) ή DIE ("
Σφάλμα επιλογής της βάσης δεδομένων " . ΟΝΟΜΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ . mysql_error () . «
"); ηχώ "
Συνδεδεμένο με το MySQL, χρησιμοποιώντας τη βάση δεδομένων " . ΟΝΟΜΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ . «.
"? ?>
Σημείωση
Βεβαιωθείτε ότι η διαδρομή σας προς app_config.PHP ταιριάζει όπου αποθηκεύσατε αυτό το αρχείο. Αν εσύ’εποικοδομώντας δεδομένων-base_connection.PHP στον ίδιο κατάλογο όπως app_config.PHP , Χρειάζεστε απλώς το όνομα του αρχείου, χωρίς διαδρομές καταλόγου.
Τώρα εσύ’Έλαβα όλο τον κωδικό βάσης δεδομένων σας να είναι όμορφα μακριά, πράγμα που σημαίνει ότι μπορείτε να ανακατασκευάσετε ριζικά run_query.PHP :
Πως’Αυτό για σύντομο κώδικα? Παρατηρήστε επίσης ότι δεν έχετε πλέον λόγο να απαιτήσετε app_config.PHP . Το σενάριό σας απαιτεί database_connection.PHP , και αυτό’μικρό δεδομένων-base_connection.PHP Αυτό χειρίζεται app_config.PHP . Ο κωδικός σας είναι πολύ καλύτερος και πιο όμορφος τώρα.
Για να βεβαιωθείτε ότι αυτό λειτουργεί, θα πρέπει να επισκεφθείτε το δικό σας queryrunner.HTML σελίδα και κάντε κλικ στο κουμπί Εκτέλεση ερωτήματος. Θα πρέπει να πάρετε κάτι σαν το σχήμα 4-8-όλα χωρίς τίποτα άλλο παρά ένα απαιτώ Στο κύριο σενάριό σας!
Εικόνα 4-8. Μπορεί να φαίνεται περίεργο να γράψετε ένα σενάριο που (τουλάχιστον μέχρι στιγμής) δεν κάνει τίποτα περισσότερο από το να απαιτεί ένα άλλο σενάριο. Στην πραγματικότητα, όσο πιο άνετα παίρνετε κωδικοποίηση, τόσο περισσότερο εσείς’Θα ευνοήσω αυτό το είδος επαναχρησιμοποίησης. Θέλετε να γράψετε αρκετό νέο κωδικό για να ολοκληρώσετε τη δουλειά. Εάν μπορείτε να επαναχρησιμοποιήσετε 100, ή 1.000, γραμμές υπάρχοντος κώδικα, τότε πρέπει.
Εκτέλεση του χρήστη σας’S SQL Query (πάλι)
Σε αυτό το σημείο, τελικά μπορείτε να συνδυάσετε αυτό που γνωρίζετε για την PHP και τι γνωρίζετε για το SQL. Έχετε ήδη κάτι που ο χρήστης βάζει στη μεγάλη περιοχή κειμένου στη φόρμα σας μέσω του $ Αίτημα μεταβλητή, η οποία όπως θυμάστε είναι ένας πίνακας (η μεταβλητή $ _request). Και μπορείτε επίσης να χρησιμοποιήσετε mysql_query Για να εκτελέσετε ένα ερώτημα.
Απλά πρέπει να βάλετε αυτά τα δύο πράγματα μαζί:
Απλά αρπάξτε το κατάλληλο πεδίο από την είσοδο από τη φόρμα HTML, περάστε το στο mysql_query , και εσύ’είναι καλό να πάω. Στη συνέχεια, μπορείτε να περάσετε στον επιστρεφόμενο πόρο PHP, $ αποτέλεσμα , σε χειρισμό σφαλμάτων αν δήλωση, και τέλος στο mysql_fetch_row Για να εκτυπώσετε τα αποτελέσματα από το ερώτημα.
Συχνές Ερώτηση: Γιατί να μην αφαιρεθεί η λειτουργία MySQL_Query?
Μπορεί να έχετε παρατηρήσει ότι ακριβώς όπως συνδέεστε συνεχώς με το MySQL - με το ίδιο όνομα χρήστη και κωδικό πρόσβασης, ξανά και ξανά - και επιλέγοντας μια βάση δεδομένων - συχνά την ίδια βάση δεδομένων, ξανά και ξανά -’θα καλέσω mysql_query , ξανά και ξανά και ξανά. Γιατί λοιπόν να μην το τοποθετήσετε σε άλλο αρχείο και να απαιτήσετε αυτό το αρχείο?
Ο λόγος είναι εκεί στον κώδικα που γράψατε για τη λειτουργία του χρήστη σας’Sql Query (πάλι): Τι περνάτε mysql_query πρόκειται να αλλάξει σχεδόν κάθε φορά που το ονομάζετε. Για παράδειγμα, στο συνδέω-συωδεομαι.PHP (Σύνδεση σε μια βάση δεδομένων MySQL), περάσατε το ερώτημα Εμφάνιση πινάκων σε αυτό? τώρα εσύ’να το περάσει ένα ερώτημα από το πεδίο φόρμας στο queryrunner.HTML. Ακόμα κι αν εσύ’καλώ mysql_query ξανά και ξανά, τι εσύ’Δίνοντας αυτή τη λειτουργία αλλάζει, έτσι’Δεν πρόκειται να σας βοηθήσει να τραβήξετε αυτή τη λειτουργία από τα κύρια σενάρια σας.
Θα μπορούσατε να μετακινηθείτε mysql_query από το κύριο σενάριό σας και περάστε σε αυτό το μέρος της δήλωσης που συνεχίζει να αλλάζει - το ερώτημα SQL. Εσείς’d πρέπει να δημιουργήσετε μια προσαρμοσμένη λειτουργία που λαμβάνει το ερώτημά σας από το κύριο σενάριο και τα χέρια σας για το ερώτημα mysql_query . Τότε πότε mysql_query Τελειωμένη λειτουργία, η προσαρμοσμένη λειτουργία θα πρέπει να μεταφέρει οτιδήποτε επέστρεψε στο κύριο σενάριο σας.
Που μπορεί να ακούγεται σαν μπουκιά και πολλή δουλειά. Το’είναι πραγματικά αρκετά εύκολο, όμως, και μόλις αρχίσετε να γράφετε τις δικές σας λειτουργίες - κάτι που εσείς’θα κάνω στο κεφάλαιο 8 - εσύ’Δ δεν έχετε κανένα πρόβλημα να το κάνετε. Αλλά τι θα κερδίζατε? Εσείς’Ο D πρέπει ακόμα να περάσει σε ένα ερώτημα και να επιστρέψει μια απάντηση. Εσείς’D Δεν κερδίζετε τίποτα από την οικοδόμηση της δικής σας λειτουργίας. ουσιαστικά θα αντικαταστήσει mysql_query , Αλλά θα’να πάρετε οποιαδήποτε επιπλέον λειτουργικότητα, και θα ήταν’t Προσθέστε οποιαδήποτε προστασία από αλλαγές ή κάτι τέτοιο στον κωδικό σας.
Τώρα, προτού να σκεφτείτε ότι πρέπει να’να ανησυχείς για τέτοιου είδους πράγματα, πάρτε ένα λεπτό. Σκέψη, “Θα μπορούσα να τραβήξω αυτόν τον κώδικα σε άλλο γενικό αρχείο? Πρέπει να το κάνω μια προσαρμοσμένη λειτουργία?” είναι πολύ καλό πράγμα! Θέλετε να σκεφτείτε έτσι, ακόμα κι αν αποφασίσετε - όπως συμβαίνει εδώ - αυτό’μικρό δεν ένα καλό πράγμα. Όσο περισσότερο κυλάτε γύρω από νέες ιδέες και τρόπους προσέγγισης του κώδικα σας, τόσο καλύτερος προγραμματιστής σας’θα είμαι. Συνεχίστε λοιπόν να ρωτάτε αυτές τις ερωτήσεις. Απλά’δεν φοβάστε να απαντήσετε στις δικές σας ερωτήσεις με ένα, “Οχι αυτό’δεν είναι τόσο καλή ιδέα στο Αυτό υπόθεση.”
Το σενάριο φαίνεται πολύ καλό, οπότε τώρα εσείς’είναι έτοιμος να δοκιμάσετε πραγματικά τα πράγματα.
Εισαγωγή στο πρώτο σας ερώτημα μέσω διαδικτύου
Πιθανότατα Don’να έχετε πολλά στη βάση δεδομένων σας σε αυτό το σημείο, οπότε ξεκινήστε δημιουργώντας ένα νέο τραπέζι που ονομάζεται urls . Εδώ’είναι το SQL You’χρειάζομαι:
Δημιουργία URL πίνακα (ID int, URL varchar (100), περιγραφή varchar (100));
Φυσικά, δεδομένου ότι εσείς’Έχετε μια ωραία περιοχή μεγάλου κειμένου, θα μπορούσατε επίσης να το εξαπλώσετε:
Δημιουργία URL πίνακα (ID int, URL varchar (100), περιγραφή varchar (100))
Είτε έτσι είτε αλλιώς, θέλετε μια φόρμα που μοιάζει με το σχήμα 4-9.
Εικόνα 4-9. Χρησιμοποιώντας ένα textarea εδώ επιτρέπει στους χρήστες σας να εισέλθουν στο SQL, ωστόσο τους αρέσει. Το’είναι ένα μικρό πράγμα, αλλά αυτά τα μικρά κομμάτια ευελιξίας και σχεδιασμού που βασίζεται στον χρήστη κάνουν τις φόρμες ιστού σας πολύ πιο ευχάριστες στη χρήση. Θαν’Δεν θέλω να γράψω μια μεγάλη μακρά δήλωση SQL σε ένα τεράστιο πλαίσιο εισόδου σε μία γραμμή, οπότε γιατί οι χρήστες σας?
Τώρα κάντε κλικ στο κουμπί Εκτέλεση ερωτήματος. Τι πήρες? Λοιπόν εσύ’Πιθανότατα κοιτάζοντας μια εκπληκτική οθόνη, όπως αυτή που φαίνεται στο σχήμα 4-10.
Εικόνα 4-10. Μερικές φορές το χειρότερο δυνατό μήνυμα σφάλματος δεν είναι ένα μήνυμα σφάλματος. Τίποτα εδώ δεν σας βοηθά να δείτε τι πήγε στραβά με το σενάριό σας. Σε περιπτώσεις όπως αυτό, ένα μήνυμα σφάλματος θα βοηθήσει, δεν θα προκαλέσει απογοήτευση.
Λοιπόν, τι συνέβη? Εάν θέλετε να μπερδευτείτε πραγματικά, κάντε κλικ στο κουμπί πίσω στο πρόγραμμα περιήγησής σας και εκτελέστε το δικό σας ΔΗΜΙΟΥΡΓΩ ΕΡΓΑΖΟΜΕΝΟ. Εσείς’Θα δείτε ένα μήνυμα όπως αυτό που φαίνεται στο σχήμα 4-11.
Εικόνα 4-11. Πρώτον, δεν είχατε τίποτα, και τώρα ένα λάθος. Τι’Συνεχίζω? Ακόμη χειρότερα, αν και γνωρίζετε ότι έχετε λάθος, ποιο είναι το πραγματικό πρόβλημα? Εκεί’είναι ακόμα αρκετή δουλειά να κάνουμε εδώ.
Την πρώτη φορά που τρέξατε το Δημιουργία πίνακα Ερώτηση για τη δημιουργία τραπεζιών με δημιουργία, δεν έχετε τίποτα - δεν αποτελεί καθόλου αποτελέσματα. Την επόμενη φορά, η MySQL σας λέει το urls υπάρχει ήδη τραπέζι! Στην πραγματικότητα, αν φτάσετε στο εργαλείο γραμμής εντολών, βλέπετε αυτό, ναι, το τραπέζι κάνει υπάρχουν στη βάση δεδομένων σας:
MySQL> Περιγράψτε τις διευθύνσεις URL. +---------------+---------------+-----+-----+---------+--------+| Πεδίο | Τύπος | NULL | Κλειδί | Προεπιλογή | Επιπλέον | +---------------+---------------+-----+-----+---------+--------+| ID | int (11) | Ναι | | NULL | | | url | varchar (100) | Ναι | | NULL | | | Περιγραφή | varchar (100) | Ναι | | NULL | | +--------------+----------------------+-----+-----+--------+--------+3 σειρές (0.00 δευτερόλεπτα)
Κοιτάξτε προσεκτικά τον κωδικό σας ξανά:
ο αν (!$ αποτέλεσμα) Το μπλοκ κώδικα δεν λειτουργεί, τόσο καθαρά $ αποτέλεσμα επέστρεψε ως κάτι διαφορετικό. Αλλά το ενώ Ο βρόχος δεν έτρεξε ποτέ. Δεν είδατε ποτέ αποτελέσματα.
Αλλά περιμένετε ένα δευτερόλεπτο. Το ερώτημά σας ήταν ένα ΔΗΜΙΟΥΡΓΩ ερώτηση. Ποιες σειρές θα επιστραφούν από αυτό το είδος ερώτησης? Θα υπήρχε’να είσαι οποιεσδήποτε σειρές, γιατί είσαι’t ζητώντας σειρές. Ζητήσατε απλώς τη MySQL να δημιουργήσει έναν πίνακα. Στην πραγματικότητα, ένα μέρος για βάζω σειρές.
Χειρισμό ερωτημάτων που δεν είναι’Επιλέξτε πληροφορίες
Το μυστικό εδώ είναι αυτό mysql_query είναι ευτυχής να πάρει ένα ΔΗΜΙΟΥΡΓΩ δήλωση. Κάνει ακόμη και ό, τι ρωτήσατε, γι 'αυτό τη δεύτερη φορά που μπήκατε σε αυτό το ερώτημα, η MySQL σας έδωσε ένα λάθος, λέγοντας ότι το urls Ο πίνακας δημιουργήθηκε ήδη. Οταν mysql_query παίρνει μια δήλωση δημιουργίας, επιστρέφει ψευδής Εάν υπήρχε ένα σφάλμα - το οποίο χειρίζεται το σενάριο σας - αλλά αλήθεια αν υπάρχει’δεν είναι σφάλμα. Και αν υπάρχει’δεν είναι σφάλμα, Δεν κάνει’να επιστρέψω οποιεσδήποτε σειρές . Παίρνετε ένα αληθής αξία $ αποτέλεσμα , Αλλά τίποτα άλλο. Και αυτό’όπου τα πράγματα πήγαν στραβά.
Οταν mysql_query Παίρνει τις περισσότερες από τις δηλώσεις SQL που Don’t Επιλέξτε δεδομένα, όπως δημιουργία, εισαγωγή, ενημέρωση, διαγραφή, πτώση και μερικά άλλα, απλά επιστρέφει αληθής (αν τα πράγματα λειτουργούσαν) ή ψευδής (αν δεν το έκαναν’Τ).
Σημείωση
Μερικές από αυτές τις εντολές SQL, όπως ΕΚΣΥΓΧΡΟΝΙΖΩ και ΔΙΑΓΡΑΦΩ , Μπορεί να σας φανεί νέο. Κύριος’Αν όμως ανησυχούν. Κάνουν ακριβώς αυτό που μοιάζουν με αυτά: ΕΚΣΥΓΧΡΟΝΙΖΩ ενημερώνει τις πληροφορίες σε έναν πίνακα και ΔΙΑΓΡΑΦΩ το αφαιρεί. Και όταν πρέπει να χρησιμοποιήσετε αυτές τις λειτουργίες σε αυτό το βιβλίο, εσείς’Θα λάβετε πολύ περισσότερες λεπτομέρειες για το πώς να χρησιμοποιήσετε το καθένα από αυτά.
Ευτυχώς, τώρα που ξέρετε τι’συμβαίνει, αυτό’Δεν είναι πολύ δύσκολο να αντιμετωπίσει το πρόβλημα. Χρειάζεστε απλώς το σενάριό σας για να μάθετε αν η συμβολοσειρά ερωτήματος SQL που παρέχεται ο χρήστης έχει μία από αυτές τις ειδικές λέξεις. Εάν ναι, πρέπει να το χειριστείτε διαφορετικά. Και ακριβώς έτσι συμβαίνει’είναι πολύ άνετο με την αναζήτηση σε χορδές.
Έτσι σκεφτείτε αυτό μέσα? Αυτό που πραγματικά θέλετε είναι κάτι τέτοιο:
- Πιάσε τον χρήστη’S Query από τη φόρμα HTML.
- Περάστε το ερώτημα mysql_query , και αποθηκεύστε το αποτέλεσμα σε μια μεταβλητή.
- Προσδιορίστε αν το αποτέλεσμα είναι ψευδές, το οποίο είναι κακό, ανεξάρτητα από το είδος του SQL που έχει περάσει.
- Εάν το αποτέλεσμα δεν είναι ψευδές, δείτε αν το ερώτημα έχει μία από τις ειδικές λέξεις -κλειδιά σε αυτό: Δημιουργία, εισαγωγή, ενημέρωση, διαγραφή ή πτώση. (Υπάρχουν άλλοι, αλλά αυτά είναι τα πιο συνηθισμένα για να ελέγξετε.·
- Εάν το ερώτημα έχει μία από αυτές τις ειδικές λέξεις, δείτε αν το αποτέλεσμα της εκτέλεσης του ερωτήματος ήταν αληθινό και αφήστε τον χρήστη να γνωρίζει ότι τα πράγματα πήγαν καλά.
- Εάν το ερώτημα δεν έχει μία από αυτές τις λέξεις, προσπαθήστε να εκτυπώσετε τις σειρές αποτελεσμάτων σαν εσάς’έχουν ήδη κάνει.
Εσείς’Έχετε ήδη πολλά από αυτόν τον κώδικα, οπότε πρέπει να προσθέσετε μόνο ένα αν (ή ίσως μερικά αν s, στην πραγματικότητα), και κάποια αναζήτηση:
$ return_rows = false; $ τοποθεσία = strpos ($ QUERY_TEXT, "Δημιουργία"); αν ($ τοποθεσία === 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; >>>>>>>>>>>>>>>>
Προειδοποίηση
Βεβαιωθείτε ότι χρησιμοποιείτε αυτό το σημάδι τριπλής εποχής ( === ) στο δικό σας αν Δηλώσεις για να ελέγξετε αν $ τοποθεσία είναι ψευδής .
Αυτός ο κωδικός μπορεί να φαίνεται δύσκολος, αλλά αυτό’είναι απλό αν περπατήσετε μέσα από τη γραμμή της. Βασικά, έχετε το ίδιο αν δήλωση, επαναλαμβάνεται ξανά και ξανά, με καθένα από αυτά που έχουν άλλο ένθετη αν δήλωση:
$ τοποθεσία = strpos ($ QUERY_TEXT, "search_string"); αν ($ τοποθεσία === false) < // Try again with another SEARCH_STRING >
Τέλος, αν όλα αν Οι δηλώσεις αποτυγχάνουν, τότε δεν κάνετε’δεν έχω Δημιουργία, εισαγωγή, ενημέρωση, διαγραφή , ή ΠΤΩΣΗ οπουδήποτε στη συμβολοσειρά ερωτήματος:
// Αυτή είναι η εντολή αν η δήλωση αν ($ 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 Query String, όχι μόνο για μια λέξη που ταιριάζει, όπως ΔΗΜΙΟΥΡΓΩ ή ΕΙΣΑΓΕΤΕ , Αλλά για αρκετές λέξεις που ταιριάζουν. Οτι’είναι λίγο δύσκολο, έτσι εσύ’πρέπει να συνεργαστούμε με μία κλήση κτύπημα τη στιγμή.
Σημείωση
Βεβαιωθείτε ότι έχετε καταλάβει αυτόν τον κωδικό, αλλά Don’t να πάρει πάρα πολύ συνδεδεμένο σε αυτό. Το’είναι πραγματικά άσχημο, και στο επόμενο κεφάλαιο, εσείς’Θα προσθέσετε ένα εξαιρετικά νέο εργαλείο στο κιτ προγραμματισμού PHP και θα επαναλάβετε αυτόν τον κωδικό για να είστε παρτίδα πιο λεπτό και πιο κομψό.
Σε κάθε βήμα, αν βρεθεί η συμβολοσειρά αναζήτησης, ο χρήστης έχει βάλει σε μία από αυτές τις ειδικές λέξεις -κλειδιά SQL που δεν doesn’T RETRAW ROWS, έτσι η μεταβλητή $ return_rows Έχει οριστεί ψευδής , διαφορετικό από την αρχική του τιμή, αληθής .
Τέλος, στο τέλος αυτού του σγουρούχου φεστιβάλ αγάπης, το αν Οι δηλώσεις επιστρέφουν στο κύριο πρόγραμμα, και $ returns_rows έχει αξία αληθής Επειδή καμία από τις αναζητήσεις δεν ταιριάζει, ή ψευδής Επειδή ένας από αυτούς έκανε.
Τώρα εσύ’είναι έτοιμος για χρήση $ returns_rows Για να εκτυπώσετε ένα αποτέλεσμα:
Σημείωση
Να θυμάστε ότι αν ($ return_rows) είναι ακριβώς το ίδιο με αν ($ return_rows === true) . Το ίδιο ισχύει και για αν ($ αποτέλεσμα) .
Το μεγαλύτερο μέρος αυτού του σεναρίου είναι οικείο. Όλος ο κωδικός εσείς’Χρησιμοποιήσατε για να εκτυπώσετε σειρές παραμένουν οι ίδιες. Αυτός ο κώδικας απλά κινείται μέσα στο αν ($ return_rows) μπλοκ, επειδή ισχύει μόνο εάν ο χρήστης βάλει κάτι σαν ΕΠΙΛΕΓΩ που επιστρέφει (ενδεχομένως) πολλά αποτελέσματα.
Τότε, στο αλλού σε αυτό αν , Το σενάριό σας αναφέρει μόνο αν τα πράγματα πήγαν εντάξει. Ως πρόσθετη βοήθεια, αυτό το τμήμα του αν εκτυπώνει το αρχικό ερώτημα, ώστε ο χρήστης να μπορεί να γνωρίζει τι εκτελέστηκε.
Τώρα, τεχνικά, εσείς DON’Δεν το χρειάζομαι πραγματικά αν ($ αποτέλεσμα) . Από τότε που δοκιμάσατε νωρίτερα για να δείτε αν $ αποτέλεσμα είναι ψευδές, αν το σενάριό σας φτάσει σε αυτό το τελευταίο κομμάτι, το ξέρετε αυτό $ αποτέλεσμα είναι αληθής , Έτσι μπορείτε να απλοποιήσετε τα πράγματα στο τέλος λίγο:
Αυτό το σενάριο γίνεται λίγο μακρύ, αλλά ξέρετε τι κάνει κάθε γραμμή σε αυτό το σημείο. Προχωρήστε και δοκιμάστε το.
Πιθανότατα δημιουργήσατε το urls Πίνακας (Εισαγωγή του πρώτου σας ερωτήματος με βάση το διαδίκτυο)-ακόμη και αν και το σενάριο PHP σας Didn’Δεν σας ενημερώνω αυτό. Προσπαθήστε λοιπόν να εισέλθετε Url drop table ; ως ερώτημα SQL. Στη συνέχεια, εκτελέστε το ερώτημά σας, και αυτή τη φορά, θα πρέπει να πάρετε ένα χρήσιμο μήνυμα πίσω, ειδικά για το ερώτημά σας χωρίς σειρά, όπως μπορείτε να δείτε στο σχήμα 4-12.
Αντιμετώπιση ανθρώπων
Δυστυχώς, εκεί’εξακολουθεί να είναι πρόβλημα σε μία από τις γραμμές του κώδικα στην προηγούμενη ενότητα. Αυτή τη στιγμή, αν ο χρήστης σας πληκτρολογήσει το ακόλουθο ερώτημα, τι συμβαίνει?
Drop Table URL;
Το σύνολο σας αν Οι δηλώσεις το κατανοούν αυτό ΠΤΩΣΗ είναι μέρος του ερωτήματος, συνειδητοποιεί ότι δεν έχει σειρές επιστροφής και κάνει το σωστό: αναφέρει ότι το ερώτημα είτε έτρεξε χωρίς προβλήματα, είτε ότι προέκυψε ένα σφάλμα.
Εικόνα 4-12. Τώρα run_query.Η PHP, όπως φαίνεται στη σελίδα 119, υπολογίζει αν’έχει περάσει ένα ερώτημα με μία από τις λέξεις -κλειδιά που δείχνουν εκεί’t Οποιεσδήποτε σειρές επιστροφής. Το μήνυμα όταν τα πράγματα πάνε καλά εξακολουθούν να είναι λίγο ρήτρες, αλλά τουλάχιστον εκεί’Δεν υπάρχει κενός χώρος από την προσπάθεια να δείξει σειρές αποτελεσμάτων όταν υπάρχει’t Οποιεσδήποτε σειρές αποτελεσμάτων για εμφάνιση.
Αλλά τι γίνεται με αυτό το ερώτημα? Βλέπετε πού είναι το πρόβλημα?
Drop Table URL;
Εδώ’είναι η δήλωση που πρέπει να υποδεικνύει έναν αγώνα:
$ τοποθεσία = strpos ($ query_text, "drop"); αν ($ τοποθεσία === false) < // this should return true, and so there are no return rows >
Αλλά αυτή η γραμμή αναζητά ΠΤΩΣΗ , Που’αντιστοιχία “πτώση” καθόλου. κτύπημα αναζητά χορδές, αλλά βλέπει ένα πεζά γράμμα, όπως “ρε”, Ως διαφορετικό γράμμα από μια κεφαλαία “ρε”. Έτσι ώστε η αναζήτηση να βρίσκει “ΠΤΩΣΗ” αλλά όχι “πτώση” ή “πτώση”.
Και, όπως πάντα, εσύ’Έχουν ανθρώπους που χρησιμοποιούν την εφαρμογή σας, όχι ρομπότ. Μπορείς’Απλά υποθέστε ότι αυτοί οι άνθρωποι θα είναι καλοί πολίτες SQL και θα χρησιμοποιούν πάντα κεφαλαία γράμματα. Θα μπορούσατε να βάλετε ένα μικρό μήνυμα στη φόρμα: Πληκτρολογήστε το SQL σας με όλα τα κεφαλαία γράμματα , Αλλά οι άνθρωποι θα είναι άνθρωποι και τείνουν να αγνοούν οδηγίες όπως αυτό.
Εσείς’Θα περάσω τουλάχιστον ως μεγάλο μέρος του χρόνου σας που ασχολείται με τον ανθρώπινο παράγοντα στον κώδικα σας ως κωδικός γραφής που χειρίζεται τη λεγόμενη κανονική ροή λειτουργίας. Στην πραγματικότητα, μόλις προσθέσετε πραγματικούς ανθρώπους στη γραμμή σκέψης σας, εσείς’Θα το συνειδητοποιήσω αυτό “κανονικός” isn’μια πολύ χρήσιμη ιδέα. Αντ 'αυτού, ο κωδικός σας πρέπει απλώς να αντιμετωπίσει όσες δυνατότητες μπορείτε να φανταστείτε (και μερικοί που μπορείτε’Τ).
Ο καθορισμός της πεζοπορίας και του κεφαλαίου προβλήματος αποδεικνύεται αρκετά απλό: μπορείτε απλά να μετατρέψετε $ query_string σε όλα τα κεφαλαία γράμματα πριν αρχίσετε να ψάχνετε μέσα από αυτό:
$ return_rows = false; $ query_text = strtoupper ($ query_text);
$ τοποθεσία = strpos ($ QUERY_TEXT, "Δημιουργία"); // όλα τα ένθετα αν μπλοκ.
Τώρα, αν ένας χρήστης πληκτρολογεί url drop table ή Url drop table , Η συμβολοσειρά αναζήτησης είναι Url drop table , και αναζήτηση για “ΠΤΩΣΗ” θα επιστρέψει έναν αγώνα.
Αλλά εκεί’είναι ένα άλλο πρόβλημα! Πριν διαβάσετε παρακάτω, δείτε αν μπορείτε να καταλάβετε τι είναι.
Σημείωση
Ναι, υπάρχουν πραγματικά πολλές ρυτίδες και προβλήματα με ένα απλό πρόγραμμα. Οτι’Γιατί υπάρχουν πολλοί προγραμματιστές, αλλά τόσο λίγοι πραγματικά σπουδαίοι προγραμματιστές: η διαφορά χειρίζεται όλες αυτές τις μικρές λεπτομέρειες χωρίς να ρίχνετε το iPhone σας μέσα από έναν κοντινό τοίχο.
Αποφύγετε την αλλαγή της εισόδου του χρήστη όποτε είναι δυνατόν
Για να εντοπίσετε αυτό το δυνητικό πρόβλημα με το σενάριο ερωτημάτων σας, ρίξτε μια ματιά στο τελευταίο κομμάτι του κώδικα σας που’Εκτελέστε εάν ο χρήστης εισέλθει σε ένα ερώτημα χωρίς ριπή όπως πτώση ή ένθετο:
// Χωρίς σειρές. Απλά αναφέρετε αν το ερώτημα έτρεξε ή όχι ηχώ "Το ερώτημά σας υποβλήθηκε σε επεξεργασία με επιτυχία.
" ηχώ "
"?
Εκτελέστε αυτόν τον κωδικό και εσείς’Λάβετε κάτι όπως βλέπετε στο σχήμα 4-13.
Εικόνα 4-13. Μερικές φορές το καλύτερο πρόβλημα που μπορείτε να λύσετε είναι το πρόβλημα που έχει’που συνέβη ακόμα. Κοιτάξτε προσεκτικά το ερώτημα SQL εδώ και συγκρίνετε το με το ερώτημα στο σχήμα 4-12. Αυτό το είδος κουραστικής εργασίας ντετέκτιβ διαρκεί ώρες, αλλά αυτό’είναι απολύτως κρίσιμο για να εργαστούν οι εφαρμογές ιστού στον πραγματικό κόσμο.
Σημείωση
Αν εσύ’ακολουθώντας, ίσως χρειαστεί Url drop table ; Πριν μπορέσετε ΔΗΜΙΟΥΡΓΩ και πάλι, ή ΔΗΜΙΟΥΡΓΩ το τραπέζι πριν μπορέσετε ΠΤΩΣΗ το.
Συγκρίνετε προσεκτικά τον κώδικα στο σχήμα 4-12 και το σχήμα 4-13. Στο σχήμα 4-13, εσείς’Θα παρατηρήσω ότι όλα είναι σε κεφαλαία. Αυτό έχει νόημα, γιατί για να διευκολύνετε την αναζήτηση, προσθέσατε αυτή τη γραμμή στο σενάριο σας:
$ query_text = strtoupper ($ query_text);
Τότε, όταν εξάγετε $ query_text Στο τέλος, η έξοδος εμφανίζεται σε όλα τα κεφαλαία γράμματα. Είναι μια μεγάλη υπόθεση? Λοιπόν, δεν το κάνει’δεν φαίνεται να είναι, τουλάχιστον όχι εδώ. Αλλά αποκαλύπτει κάτι: μετά από αυτό $ query_text Η συμβολοσειρά μετατρέπεται σε κεφαλαία, κάθε φορά’χρησιμοποιούνται, αυτό’να επιστρέφει με όλα τα κεφαλαία γράμματα. Ας υποθέσουμε λοιπόν ότι το αρχικό ερώτημα ήταν κάτι τέτοιο:
Επιλέξτε * από χρήστες όπου το τελευταίο_Name = "MacLachlan";
Τώρα εξετάστε το ίδιο ερώτημα, μετατράπηκε σε όλα τα κεφαλαία γράμματα:
Επιλέξτε * από χρήστες όπου το τελευταίο_Name = "MacLachlan";
Πιστέψτε το ή όχι, αυτά δεν είναι το ίδιο ερώτημα. ΕΠΙΛΕΓΩ -Και τα περισσότερα από τα άλλα ερωτήματα SQL - πρόκειται να αντιμετωπίσουν ένα επώνυμο του “Maclachlan” ως εντελώς διαφορετικό από “Maclachlan.” Έτσι, αυτά τα δύο ερωτήματα δεν είναι πανομοιότυπα καθόλου.
Προς το παρόν, αυτό δεν’να δημιουργήσω οποιοδήποτε πρόβλημα. Το σενάριό σας δεν εκ νέου εκ νέου το ερώτημα, και mysql_query τρέχει με $ query_text πριν έχει μετατραπεί σε κεφαλαία έκδοση. Αλλά αυτό είναι ένα πρόβλημα που περιμένει να συμβεί.
Γενικά, θέλετε να προσπαθήσετε να αποφύγετε την άμεση αλλαγή της εισόδου από έναν χρήστη. Οτι’S επειδή παίρνετε ακριβώς αυτό το είδος προβλήματος: ίσως χρειαστεί να χρησιμοποιήσετε αυτήν την είσοδο ξανά και μόλις εσείς’Το άλλαξε, μπορείτε’να επιστρέψω.
Ευτυχώς, το φάρμακο είναι απλό: αντί να αλλάξετε τον χρήστη’S INPUT, χρησιμοποιείτε μια νέα μεταβλητή για να αποθηκεύσετε την έκδοση κεφαλαίου του ερωτήματος:
$ return_rows = false; $ uppercase_query_text = strtoupper ($ query_text);
$ τοποθεσία = strpos ($ QUERY_TEXT, "Δημιουργία");
Θα πρέπει να χρησιμοποιήσετε αυτή τη νέα μεταβλητή σε όλες τις συγκρίσεις συμβολοσειρών σας:
$ return_rows = false; $ uppercase_query_text = strtoupper ($ query_text);$ τοποθεσία = strops ($ uppercase_query_text, "create");
αν ($ τοποθεσία === false) <$ τοποθεσία = strpos ($ uppercase_query_text, "εισάγετε");
αν ($ τοποθεσία === false) <$ τοποθεσία = strpos ($ uppercase_query_text, "update");
αν ($ τοποθεσία === false) <$ τοποθεσία = strpos ($ uppercase_query_text, "delete");
αν ($ τοποθεσία === false) <$ τοποθεσία = strops ($ 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 όπου όνομα = 'UPDATE GPA' ή NAME = 'DROP A CLASS'
Αυτό είναι ένα ΕΠΙΛΕΓΩ δήλωση, έτσι run_query.PHP θα πρέπει να εκτελέσετε το SQL και να εκτυπώσετε όλες τις σειρές που επέστρεψαν από αυτό το ερώτημα. Αλλά εκεί’είναι ένα δυσάρεστο μικρό πρόβλημα, δεν είναι’εκεί?
Ναι. Ο κωδικός σας που αναζητά “εκσυγχρονίζω” και “πτώση” θα αναφέρει ότι αυτό το ερώτημα έχει και τα δύο λόγια σε αυτό και απλά επιστρέφει “Το SQL σας διεξήχθη χωρίς προβλήματα.” Μα αυτό είναι ένα πρόβλημα!
Για να λύσετε το πρόβλημα, σκεφτείτε τη δομή του SQL. Αυτές τις ειδικές λέξεις -κλειδιά- Δημιουργία, εισαγωγή , Και οι φίλοι τους - όλα είναι τα πρώτα λέξη στο ερώτημα. Πρέπει λοιπόν να πάρετε τη θέση του αγώνα και να δείτε αν αυτή η θέση είναι θέση 0. Μπορείτε να το κάνετε αυτό προσθέτοντας στο δικό σας αν συνθήκες και χρησιμοποιώντας το OR ή τον χειριστή στο PHP:
αν ($ location === false || $ τοποθεσία> 0)Το διπλό σωλήνα (||) σημαίνει “ή” σε PHP. Έτσι, η γραμμή κώδικα λέει, αν υπάρχει’δεν ταιριάζει καθόλου ( $ τοποθεσία === false ) ή ο αγώνας είναι’t ξεκινώντας από την πρώτη θέση (θέση 0), τότε αναζητήστε την επόμενη λέξη -κλειδί. Φυσικα εσυ’D πρέπει να αλλάξετε όλα σας αν δηλώσεις, που είναι ακόμη και πιο messier. Επομένως, αυτή η επιδιόρθωση είναι μια βελτίωση, αν και αυτή που πραγματικά αναπαριστά τον κωδικό σας ακόμη περισσότερο.
Αλλά χειροτερεύει! Εσείς’Αντιμετωπίζοντας πραγματικούς ανθρώπους και οι άνθρωποι κάνουν αστεία πράγματα. Ας υποθέσουμε ότι κάποιος εισέρχεται σε αυτό το SQL στη φόρμα σας:
Δημιουργία URL πίνακα (ID int, URL varchar (100), περιγραφή varchar (100));Τώρα εσύ’έχω ένα νέο πρόβλημα: αυτό δεν είναι’t α ΕΠΙΛΕΓΩ , Αλλά ο κωδικός αναζήτησης κέρδισε’να βρείτε μία από αυτές τις ειδικές λέξεις στην αρχή. Ο πρώτος χαρακτήρας είναι απλώς ένας χώρος: “ ”.
Αλλά μπορείτε επίσης να λύσετε αυτό το πρόβλημα, χρησιμοποιώντας μια άλλη γνωστή λειτουργία: τακτοποίηση. τακτοποίηση απαλλάσσεται από το Whitespace, και αν το κάνετε αυτό πριν αναζητήσετε, τότε θα πρέπει να είστε σε καλή κατάσταση:
$ uppercase_query_text = trim (strtoupper ($ query_text));Αυτό φαίνεται πιθανώς σαν τόνος εργασίας για μια πραγματικά απλή μορφή, ένα-textarea. Αλλά όταν εσύ’Εργασία με την είσοδο του χρήστη, θέλετε να σκεφτείτε συνεχώς τι θα μπορούσαν να κάνουν οι χρήστες. Και πώς μπορείτε να τους βοηθήσετε να τους αποφύγετε να βλέπετε κάτι παράξενο ή να κάνετε λάθος. Σκεφτείτε έτσι και εσείς’Θα δημιουργήσετε καλύτερα, πιο σταθερές, πιο ευχάριστες εφαρμογές ιστού.
Παίρνω Php & MySQL: Το εγχειρίδιο που λείπει τώρα με το O’Πλατφόρμα μάθησης Reilly.
Ο’Τα μέλη του Reilly βιώνουν βιβλία, ζωντανά γεγονότα, μαθήματα επιμελημένα από τον ρόλο της εργασίας και πολλά άλλα από O’Reilly και σχεδόν 200 κορυφαίοι εκδότες.
Είναι απαραίτητο να χρησιμοποιήσετε την PHP για να συνδεθείτε στο MySQL
Είναι απαραίτητο να χρησιμοποιήσω την PHP για να συνδεθείτε με το MySQL που εργάζομαι στην εφαρμογή επιφάνειας εργασίας και δεν έχω γνώση της PHP είτε υπάρχει κάποια κατηγορία κατασκευής ή λειτουργικότητα που μπορεί να χρησιμοποιηθεί για να συνδεθεί με το MySQL, αν και υπάρχουν πολλά προγράμματα μέσω του Διαδικτύου για να το κάνουν, αλλά ανίκανοι χωρίς τη χρήση της PHP. Υπάρχει κάποια αναφορά ή μπορώ να έχω το βήμα προς βήμα παράδειγμα σχετικά με το έργο. Το MySQL Config διαθέτει τις προεπιλεγμένες ρυθμίσεις. όπως το όνομα χρήστη είναι root και ο κωδικός πρόσβασης είναι κενό το όνομα του διακομιστή μου είναι τοπικός κεντρικός υπολογιστής.
39.3K 4 4 χρυσά κονκάρδες 37 37 ασημένια σήματα 59 59 χάλκινα κονκάρδες
ρώτησε 19 Οκτωβρίου 2011 στις 23:00
7 4 4 χάλκινα κονκάρδες
Το έβαλα με ετικέτα ως PHP και MySQL και αφαιρέσαμε τις ετικέτες Flex. Αυτή η ερώτηση δεν έχει καμία σχέση με το Flex.
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 έχει κάποια βιβλιοθήκη κατασκευής που πρέπει να γνωρίζω ή κάποια άλλη αναφορά μέσω της οποίας μπορώ να συνδεθώ στη βάση δεδομένων.Χρειάζεστε βοήθεια σχετικά με αυτό το θέμα.
Λειτουργίες MySQL
Σημείωση:
Οι περισσότερες λειτουργίες MySQL αποδέχονται το link_identifier ως την τελευταία προαιρετική παράμετρο. Εάν δεν παρέχεται, χρησιμοποιείται η τελευταία σύνδεση. Εάν δεν υπάρχει, η σύνδεση δοκιμάζεται να δημιουργηθεί με προεπιλεγμένες παράμετροι που ορίζονται στην PHP.ini . Εάν δεν είναι επιτυχείς, οι λειτουργίες επιστρέφουν ψευδής .
Πίνακας περιεχομένων
- mysql_affected_rows - Λάβετε τον αριθμό των προσβεβλημένων σειρών σε προηγούμενη λειτουργία mysql
- 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_field - Λάβετε πληροφορίες στήλης από ένα αποτέλεσμα και επιστρέψτε ως αντικείμενο
- mysql_fetch_lengths - Αποκτήστε το μήκος κάθε εξόδου σε ένα αποτέλεσμα
- 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 - 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 ΣΗΜΕΙΩΣΕΙΣ 38 ΣΗΜΕΙΩΣΕΙΣ
15 χρόνια πριν
# Δημιουργήθηκε από το Dhirendra μπορεί να προσεγγιστεί στο Dhirendrak στο Yahoo Dot Com
# Αυτό το σενάριο δημιουργείται για να ελέγξει τη διαφορά δεδομένων μεταξύ δύο πινάκων
# Όταν η δομή και των δύο πινάκων είναι ίδια.
# Περιορισμός:
# 1) Η δομή και των δύο πινάκων πρέπει να είναι ίδια.
# 2) Το όνομα και του δύο πίνακα θα πρέπει να είναι διαφορετικό, αλλά αν το ίδιο από προφανώς
# Δεύτερος πίνακας θα πρέπει να είναι εάν διαφορετική βάση δεδομένων.
# 3) Εάν χρησιμοποιήσετε δύο βάσεις δεδομένων από ό, τι και οι δύο άδεια βάσης δεδομένων πρέπει να είναι ίδια
# καθώς χρησιμοποιώ ψευδώνυμα για να λάβω τις πληροφορίες.
#
# Χρησιμοποιεί ::
# 1) Αυτό μπορεί να είναι χρήσιμο όταν κάνατε κάποιες αλλαγές στις υπάρχουσες
# σενάριο και περιμένετε την συγκεκριμένη έξοδο. Έτσι με τη βοήθεια αυτού
# Λειτουργία Μπορείτε να συγκρίνετε τον αντίκτυπο λόγω των αλλαγών σας στο σενάριο.
#
#
?php
$ host = ""; # Όνομα κεντρικού υπολογιστή ή διεύθυνση IP
$ user = ""; # Όνομα χρήστη βάσης δεδομένων
$ pass = ""; # κωδικός πρόσβασης βάσης δεδομένων
$ database = ""; # όνομα DateAbase με το οποίο θέλετε να συνδεθείτε
# Λάβετε σύνδεση με το MySQL
$ dblink = @ mysql_connect ($ host, $ user, $ pass);
# Επιλέξτε και ανοίξτε τη βάση δεδομένων
mysql_select_db ($ database, $ dblink);
$ db1 = "< your db1 >"// Πρώτη βάση δεδομένων
// Δεύτερη βάση δεδομένων Εάν η βάση δεδομένων είναι ίδια και για τους δύο πίνακες παρά τη χρήση του ίδιου με το DB1
$ db2 = "< your db2 >"?
$ table1 = "< your table1 >"// Πρώτος πίνακας
// δεύτερος πίνακας εάν η βάση δεδομένων είναι ίδια και για τους δύο πίνακες από το όνομα του πίνακα
# Πρέπει να είναι διαφορετικό, αλλά το όνομα των πεδίων είναι ίδια και η σειρά των πεδίων είναι ίδια.
// Η λειτουργία ξεκινά εδώ
Λειτουργία Table_Data_Difference ($ πρώτα, $ δευτερόλεπτο)
Global $ dblink;
$ SQL1 = "Εμφάνιση πεδίων από $ first";
$ result = mysql_query ($ sql1, $ dblink) ή die ("Σφάλμα στην εκτέλεση 1 = Λέξη -κλειδί">. mysql_error ());
ενώ ($ row = mysql_fetch_object ($ αποτέλεσμα))
<
$ from_fields [] = $ row -> πεδίο;
>
$ sql = "επιλέξτε * από $ first";
$ res = mysql_query ($ sql, $ dblink) ή να πεθάνει ("έχει σφάλμα στην εκτέλεση 2 = λέξη -κλειδί">. mysql_error ());
$ j = 1;
ενώ ($ row = mysql_fetch_array ($ res))
$ num = count ($ from_fields);
$ sql_next = "Επιλέξτε $ δευτερόλεπτο .* από $ δευτερόλεπτο όπου "?
για ($ i = 0; $ i < $num ; $i ++)
$ sql_next = $ sql_next . "" . $ δευτερόλεπτο . «.« . $ from_fields [$ i]. "=" " . $ row [$ from_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 . «
« . $ from_fields [$ i]. "Λέξη -κλειδί">. $ row [$ from_fields [$ i]];
>
// Εμφάνιση της εγγραφής που δεν ταιριάζουν.
ηχώ "
\ n " . $ j . «.« . $ val;
ηχώ "
-----------------------------------------------------"?
$ j ++;
>
$ first = $ db1 . "." . $ Πίνακας1;
$ δευτερόλεπτο = $ db2 . "." . $ table2;
table_data_difference ($ πρώτα, $ δευτερόλεπτο);
Πριν από 16 χρόνια
Για τους χρήστες των Windows, σημειώστε:
Εάν το Apache είναι εγκατεστημένο ως υπηρεσία και αλλάζετε τη μεταβλητή διαδρομής, ώστε να μπορεί να φτάσει στο libmysql.DLL, θα χρειαστεί να επανεκκινήσετε το μηχάνημά σας για να εφαρμόσετε αλλαγές.
15 χρόνια πριν
Επίσης, για να εξασφαλίσετε δεδομένα MySQL και να είστε σε θέση να συμμορφωθείτε με τα πρότυπα PCI, θα πρέπει να κρυπτογραφήσετε τα δεδομένα. Υπάρχουν πολλοί τρόποι για να το κάνετε. Για τους χάκερς, μπορείτε να χρησιμοποιήσετε DM-Crypt (www.λάσπη.Εργαλείο de/misc/dm-crypt). Χρησιμοποιείται βασικά για την κρυπτογράφηση ολόκληρου του διαμερίσματος. Εάν θέλετε μια εκλεπτυσμένη λύση να μεταβείτε με τον Γενικό Ασφάλεια για το MySQL από το General Packet (www.πακέτο.com)
Στα Windows, μπορείτε να χρησιμοποιήσετε τη λειτουργία κρυπτογράφησης δίσκου που παρέχεται από τα ίδια τα Windows ή εργαλείο όπως το Trucrypt (www.κρυπτογράφημα.org)
15 χρόνια πριν
@Amanda 12-OCT-2007 09:58
Σχεδόν έπρεπε να αναρωτηθώ αν αυτό ήταν μια πραγματική ερώτηση. Εάν ο διακομιστής MySQL απορρίψει την προσπάθεια σύνδεσης τότε, ναι, η MySQL θα μπορούσε να στείλει πίσω ένα σφάλμα στην PHP. Και αν η PHP δεν μπορεί να έχει πρόσβαση στον στόχο MySQL Server καθόλου τότε είναι επίσης αρκετά έξυπνο για να εκδώσει το κατάλληλο σφάλμα από μόνο του.
Πριν από 17 χρόνια
Αν θέλετε να πάρετε το PHP να λειτουργεί ωραία με το MySQL, ακόμη και με το Apache, κάτω από τα Windows Systems, δοκιμάστε το XAMPP, από τους φίλους του Apache. Εξοικονομεί το Messing με τα αρχεία ρυθμίσεων, τα οποία είναι το μόνο σημαντικό πρόβλημα με την προσπάθεια να πάρουν τα τρία να συνεργαστούν κάτω από τα Windows.
Πριν από 17 χρόνια
Μια σημείωση για τους πόρους
Όταν ένας πόρος (e.σολ. ένα αναγνωριστικό σύνδεσης) εξαντλείται από το πεδίο εφαρμογής, διαγράφεται και οι σχετικοί πόροι πληροφορικής (ε).σολ. ο σύνδεσμος TCP προς τη βάση δεδομένων) θα τερματιστεί επίσης. Μέχρι εδώ καλά!
Ωστόσο, στον ακόλουθο κώδικα ο σύνδεσμος TCP MySQL παραμένει μέχρι το τέλος της εκτέλεσης:
$ conn = mysql_connect ('hostName', 'username', 'password');
$ conn = null;
ύπνος (30);
?>
Αυτό οφείλεται στο γεγονός ότι ο εσωτερικά ο αναγνωριστικός σύνδεσμος αποθηκεύεται, έτσι ώστε να λειτουργούν οι επακόλουθες λειτουργίες MySQL. Φαίνεται να μην υπάρχει τρόπος να διαγραφεί αυτή η εσωτερική αναφορά.
Αν όμως ήσασταν να ανοίξετε 2 συνδέσεις, το παλαιότερο θα διαγραφεί αυτόματα (οπότε η σύνδεση με το όνομα κεντρικού υπολογιστή θα τερματιστεί στη δήλωση $ conn = null, η σύνδεση με το hostname2 θα υπάρχει μέχρι το τέλος του σεναρίου).
$ conn = mysql_connect ('hostName', 'username', 'password');
$ conn2 = mysql_connect ('hostName2', 'username', 'password');
$ 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. Εξαγωγή του .Η έκδοση PHP Zip σε αυτήν (όχι η έκδοση αυτόματης εγκατάστασης). Επεξεργάστηκα το PHP.Το Ini-συνέντευξη, μετονομάστηκε σε μόνο PHP, πρόσθεσε το όνομα χρήστη SQL, το όνομα της βάσης δεδομένων κ.λπ.(Πρέπει πραγματικά να κοιτάξετε προσεκτικά το αρχείο CFG και να βεβαιωθείτε ότι δεν παραβλέπετε κάτι). Ενεργοποιήστε την επέκταση = php_mysql.dll (απλώς διαγράψτε το ημι-χρωματισμό που μπροστά του). Προστέθηκε ο φάκελος PHP στη διαδρομή (οδηγίες για το πώς να το κάνετε αυτό είναι αρκετά απλές και τεκμηριωμένες παραπάνω). Έκανα επίσης το φάκελο Ext στη διαδρομή, αλλά δεν είμαι σίγουρος αν είναι πραγματικά απαραίτητο. Τα σχόλια των χρηστών είναι αυτό που πραγματικά με βοήθησε, έτσι σκέφτηκα ότι θα επιστρέψω την χάρη και θα προσπαθήσω να επεκταθώ σε αυτό το θέμα λίγο.
Πριν από 18 χρόνια
Προβλήματα Fedora MySQL!!
Στο Fedora 3 η μονάδα PHP MySQL δεν έρχεται με την προεπιλεγμένη εγκατάσταση. Για να το εγκαταστήσετε χρησιμοποιήστε $> yum install php_mysql
Αν δεν το κάνετε αυτό, θα λάβετε σφάλματα με λειτουργίες MySQL όπως το mysql_connect ()
Ελπίζω να βοηθήσει αυτό!
Πριν από 18 χρόνια
Εάν θέλετε να αναπαράγετε την έξοδο του `MySQL - -HTML`, εκτυπώνοντας τα αποτελέσματά σας σε έναν πίνακα HTML, δείτε αυτή τη λειτουργία:
Πριν από 21 χρόνια
Γεια, εδώ είναι ένα ωραίο μικρό τέχνασμα για να επιλέξετε εγγραφές σε τυχαία σειρά από έναν πίνακα σε μια βάση δεδομένων MySQL πριν από την έκδοση 3.23
Επιλέξτε *, (itemid/itemid) *Rand () ως myrandom από την παραγγελία των αντικειμένων από το MyRandom
[Editors Σημείωση: Και απλώς "επιλέξτε * από την παραγγελία Foo από το Rand ()" Μετά από 3.23]
15 χρόνια πριν
Αφού έλαβα τελικά IIS, PHP και MySQL σε ένα νέο μηχάνημα Windows XP, αποφάσισα να γράψω τα βήματα που πήρα, ώστε να μπορείτε να δείτε πώς έγινε: http: // www.atksolutions.com/άρθρα/install_php_mysql_iis.HTML
Ελπίζω να βοηθήσει αυτό.
15 χρόνια πριν
/*
Εγκατάσταση διακομιστή MySQL (κοινότητα) σε Windows XP 32-bit 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/downloads/connector/php/for mysql έκδοση 4.1.16 και υψηλότερα, MySQL 5.0.18, και MySQL 5.1. Όπως και με την ενεργοποίηση οποιασδήποτε επέκτασης PHP στο PHP.ini (όπως php_mysql.dll), η οδηγία PHP Extension_dir θα πρέπει να ρυθμιστεί στον κατάλογο όπου βρίσκονται οι επεκτάσεις PHP.
Το MySQL δεν είναι πλέον ενεργοποιημένο από προεπιλογή, οπότε το php_mysql.Το DLL DLL πρέπει να είναι ενεργοποιημένο μέσα στο PHP.ini. Επίσης, η PHP χρειάζεται πρόσβαση στη βιβλιοθήκη πελατών MySQL. Ένα αρχείο που ονομάζεται LibMysql.Το DLL περιλαμβάνεται στη διανομή των Windows PHP και για να μιλήσει η PHP στο MySQL αυτό το αρχείο πρέπει να είναι διαθέσιμο στη διαδρομή των Windows Systems Path.
Μετά το σενάριο PHP είναι χρήσιμο για τη δοκιμή της σύνδεσης PHP με το MySQL.
*/
// $ connect = mysql_connect ("το όνομα του κεντρικού υπολογιστή σας", "mysql ριζικός κατάλογος", "mysql κωδικός πρόσβασης, αν υπάρχει");
// $ connect = mysql_connect ("Όνομα κεντρικού υπολογιστή ή διεύθυνση - 127.0.0.1 "," root "," κωδικός πρόσβασης ");
$ connect = mysql_connect ("localHost", "root", "κωδικός πρόσβασης");
αν ($ connect) echo "Συγχαρητήρια!\ n
"?
echo "που συνδέεται με επιτυχία στον διακομιστή βάσης δεδομένων MySQL.\ n
"?
> else $ σφάλμα = mysql_error ();
echo "δεν μπόρεσε να συνδεθεί στη βάση δεδομένων. Σφάλμα = $ σφάλμα .\ n
"?
έξοδος();
>
// Σύνδεση κλεισίματος
$ close = mysql_close ($ connect);
αν ($ close) echo "\ n
"?
echo "τώρα κλείνοντας τη σύνδεση. \ n
"?
echo "Η σύνδεση MySQL έκλεισε επιτυχώς επίσης.\ n
"?
> Elsecho "Υπάρχει πρόβλημα στο κλείσιμο της σύνδεσης 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);
> else arsort ($ temp_array);
>
$ new_results = array ();
$ i = 0;
foreach ($ temp_array ως $ k => $ v) $ new_results [$ i] = $ αποτελέσματα [$ k];
$ I ++;
>
Ksort ($ new_results);
επιστροφή $ new_results;
//χρήση
αν (count ($ _ session ["res"]) == 0) $ _session ["res"] = [Αποκτήστε αποτελέσματα βάσης δεδομένων
>
$ _Session ["res"] = mysql_sort ($ _ session ["res"], $ _request ["sort"], $ _request ["dir"]);
Πριν από 17 χρόνια
Ο John Coggeshall έγραψε ένα σενάριο συμβατότητας 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 ορίσει τα εξής:
extension_dir = "pattoextensions (USUSALLY [YourpathTophp] \ ext)"
επέκταση = php_mysql.DLL (βεβαιωθείτε ότι αυτό δεν είναι commented εάν είναι ήδη στο PHP σας.ini)
Στο IIS, ανοίξτε τις επεκτάσεις υπηρεσιών ιστού, κάντε κλικ στην επιλογή "Προσθήκη νέας επέκτασης υπηρεσίας ιστού. «
Τύπος PHP για το όνομα επέκτασης
Σύμφωνα με τα απαιτούμενα αρχεία:
Προσθέστε [yourpathtophp] \ php5isapi.ρήτρα
Προσθήκη [YourpathTophp] \ Php5ts.ρήτρα
Κάντε κλικ στο κουμπί 'Εφαρμογή' και, στη συνέχεια, κάντε κλικ στο 'OK'
Δημιουργήστε ιστότοπους όπως συνήθως, αλλά βεβαιωθείτε ότι έχουν εκτελέσιμα δικαιώματα, όχι μόνο πρόσβαση σεναρίου. Κάτω από την καρτέλα "Home Directory", κάντε κλικ στην επιλογή "Διαμόρφωση". Μετακινηθείτε προς τα κάτω τη λίστα στην κορυφή και δείτε αν μπορείτε να βρείτε PHP. Εάν το κάνετε, βεβαιωθείτε ότι η διαδρομή προς το εκτελέσιμο για την PHP είναι σωστή. Εάν δεν βρείτε PHP στη λίστα, κάντε κλικ στο κουμπί 'Προσθήκη. ', στη συνέχεια, περιηγηθείτε στο σωστό εκτελέσιμο, [YourpathTophp] \ Php5isapi.DLL και κάντε κλικ στο OK. Στο πεδίο επέκτασης, εισάγετε το '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 (
string $ server = ini_get ("mysql.default_host ") ,
string $ username = ini_get ("mysql.default_user ") ,
string $ password = ini_get ("mysql.default_password ") ,
bool $ new_link = ψευδής ,
int $ client_flags = 0
): πόρος | ψευδής
Ανοίγει ή επαναχρησιμοποιεί μια σύνδεση με έναν διακομιστή MySQL.
Παράμετροι
Ο διακομιστής MySQL. Μπορεί επίσης να περιλαμβάνει έναν αριθμό θύρας. μι.σολ. "HostName: Port" ή μια διαδρομή προς μια τοπική υποδοχή E.σολ. ":/path/to/socket" για το localhost.
Εάν η οδηγία PHP MySQL.Το default_host είναι απροσδιόριστο (προεπιλογή), τότε η προεπιλεγμένη τιμή είναι 'localhost: 3306'. Σε λειτουργία SQL Safe, αυτή η παράμετρος αγνοείται και χρησιμοποιείται πάντα η τιμή 'localhost: 3306'.
Το όνομα χρήστη. Η προεπιλεγμένη τιμή ορίζεται από το MySQL.προεπιλεγμένος. Στη λειτουργία SQL Safe, αυτή η παράμετρος αγνοείται και το όνομα του χρήστη που κατέχει τη διαδικασία διακομιστή χρησιμοποιείται.
Ο κωδικός. Η προεπιλεγμένη τιμή ορίζεται από το MySQL.προεπιλογή_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');
αν (! $ link) die ('Δεν μπόρεσε να συνδεθεί:' . mysql_error ());
>
echo 'Connected με επιτυχία'?
mysql_close ($ link);
?>?php
Παράδειγμα #2 mysql_connect () Παράδειγμα χρησιμοποιώντας το όνομα κεντρικού υπολογιστή: Σύνταξη θύρας
// Συνδέουμε το παράδειγμα.com και θύρα 3307
$ link = mysql_connect ('παράδειγμα.com: 3307 ',' mysql_user ',' mysql_password ');
αν (! $ link) die ('Δεν μπόρεσε να συνδεθεί:' . mysql_error ());
>
echo 'Connected με επιτυχία'?
mysql_close ($ link);
?php
// Συνδέουμε με το localhost στη θύρα 3307
$ link = mysql_connect ('127.0.0.1: 3307 ',' mysql_user ',' mysql_password ')
αν (! $ link) die ('Δεν μπόρεσε να συνδεθεί:' . mysql_error ());
>
echo 'Connected με επιτυχία'?
mysql_close ($ link);
?>
Παράδειγμα #3 mysql_connect () Παράδειγμα χρησιμοποιώντας τη σύνταξη ":/path/to/socket"
// Συνδέουμε με το localhost και την υποδοχή e.σολ. /tmp/mysql.κάλτσα
?php
// Παραλλαγή 1: Παραλείψτε το localhost
$ link = mysql_connect (':/tmp/mysql', 'mysql_user', 'mysql_password');
αν (! $ link) die ('Δεν μπόρεσε να συνδεθεί:' . mysql_error ());
>
echo 'Connected με επιτυχία'?
mysql_close ($ link);
// παραλλαγή 2: με localhost
$ link = mysql_connect ('localhost:/tmp/mysql.κάλτσα ',' mysql_user ',' mysql_password ');
αν (! $ link) die ('Δεν μπόρεσε να συνδεθεί:' . mysql_error ());
>
echo 'Connected με επιτυχία'?
mysql_close ($ link);
?>
Σημειώσεις
Σημείωση:
Κάθε φορά που καθορίζετε το "LocalHost" ή το "LocalHost: Port" ως διακομιστής, η βιβλιοθήκη πελάτη MySQL θα το αντικαταστήσει και θα προσπαθήσει να συνδεθεί με μια τοπική πρίζα (ονομάζεται σωλήνας στα Windows). Εάν θέλετε να χρησιμοποιήσετε το TCP/IP, χρησιμοποιήστε "127.0.0.1 "αντί" Localhost ". Εάν η βιβλιοθήκη πελατών MySQL προσπαθεί να συνδεθεί με λάθος τοπική υποδοχή, η σωστή διαδρομή θα πρέπει να ρυθμιστεί ως MySQL.default_host σε PHP.Το πεδίο Ini και το πεδίο διακομιστή άφησε κενό.
Σημείωση:
Ο σύνδεσμος προς τον διακομιστή θα κλείσει μόλις τελειώσει η εκτέλεση του σεναρίου, εκτός αν κλείσει νωρίτερα καλώντας ρητά το MySQL_CLOSE () .
Σημείωση:
Σφάλμα "Δεν είναι δυνατή η δημιουργία υποδοχής TCP/IP (10106)" συνήθως σημαίνει ότι η οδηγία διαμόρφωσης μεταβλητών_ORDER δεν περιέχει χαρακτήρα Ε . Στα Windows, εάν το περιβάλλον δεν αντιγράφεται, η μεταβλητή περιβάλλοντος Systemroot δεν θα είναι διαθέσιμη και η PHP θα έχει προβλήματα φόρτωσης Winsock.
Δείτε επίσης
- mysql_pconnect () - Ανοίξτε μια επίμονη σύνδεση με έναν διακομιστή MySQL
- mysql_close () - Κλείστε τη σύνδεση MySQL
Σημειώσεις που συνεισέφεραν από τον χρήστη 36 Σημειώσεις
10 ΧΡΟΝΙΑ πριν
Προσέξτε εδώ εάν χρησιμοποιείτε το UTF8.
Το αρχείο db.Η επιλογή της βάσης δεδομένων σας πρέπει να περιέχει τις ακόλουθες γραμμές:
προεπιλεγμένος χαρακτήρας-set = utf8
προεπιλεγμένη-συλλογή = utf8_general_ci
Αυτό σημαίνει ότι η βάση δεδομένων σας δημιουργείται για να χρησιμοποιήσετε το UTF8 χαρακτήρες.
Ένας τρόπος για να επιτευχθεί αυτό είναι:
Δημιουργία βάσης δεδομένων my_database προεπιλεγμένο σύνολο χαρακτήρων utf8 utf8_general_ci;
Στη συνέχεια, μετά τη σύνδεση με αυτό από την PHP θα πρέπει να χρησιμοποιήσετε:
mysql_set_charset ("utf8", $ σύνδεση);
Εάν δεν το κάνετε αυτό, θα έχετε άσχημα προβλήματα σε περίπτωση που άλλο λογισμικό διαβάζει και γράφει στην ίδια βάση δεδομένων.
15 χρόνια πριν
Το ζήτημα πάρα πολλών συνδέσεων μπορεί να οφείλεται σε διάφορα προβλήματα.
1. Χρησιμοποιείτε το PCONNECT. Αυτό μπορεί να συνδέσει πολλές συνδέσεις και δεν είναι πραγματικά απαραίτητο για το MySQL, καθώς οι νέες συνδέσεις είναι πολύ γρήγορες.
2. Τα παιδιά Apache κρέμονται για πολύ καιρό - συνδυάστε αυτό με το PConnect και έχετε συνταγή για καταστροφή.
Προτάσεις: Μειώστε το χρονικό διάστημα οι διαδικασίες Apache Child παραμένουν συνδεδεμένες με τον πελάτη και πόσες συνδέσεις πριν σκοτωθούν. Και μην χρησιμοποιείτε το 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
# extensión .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
Οι δείκτες επιλογών που ακολουθούν τις ακροδέκτες περιλαμβάνουν execcgi
Επιτρέπεται η μηδενική
Επιτρέψτε από όλους
Πριν από 16 χρόνια
Σε περίπτωση που κάποιος άλλος παίρνει "ο πελάτης δεν υποστηρίζει το πρωτόκολλο ελέγχου ταυτότητας που ζητείται από το διακομιστή. Εξετάστε το σφάλμα αναβάθμισης του πελάτη MySQL". Το πρόβλημα είναι η νέα μέθοδος hashing κωδικού πρόσβασης που χρησιμοποιείται από το MySQL> = 4.1 που αναφέρεται παρακάτω.
Είτε ενημερώστε το PHP σε V5 όπου υποστηρίζεται το νέο hashing κωδικού πρόσβασης είτε χρησιμοποιήστε το old_password () στο MySQL 4.1.
Ενημερώστε το MySQL.Σύνθεση χρήστη Κωδικός πρόσβασης = old_password ("youroldHashPassword") όπου user = 'youruserid' και host = 'yourhost'
Πριν από 9 χρόνια
$ spojeni = mysql_connect (διακομιστής $, $ login, $ pass) ή να πεθάνει ('nelze se pripojit');
mysql_select_db ($ db, $ spojeni);
mysql_query ("Ορίστε ονόματα" utf8 ");
?>
15 χρόνια πριν
Το mysql_client_ssl δεν λειτουργεί, χρησιμοποιεί mysqli και mysqli-> ssl_set ()
Πριν από 13 χρόνια
Ας ελπίσουμε ότι αυτό σώζει κάποιον κάποια θλίψη.
Ο υπολογιστής μου dev είναι παράθυρα και τρέχει wampserver. Έχω συχνά προβλήματα με την PHP να μην είναι σε θέση να συνδεθεί με το MySQL μετά από περιόδους ακραίας δραστηριότητας DB.
Μεγάλη ιστορία σύντομη, ήταν επειδή δεν έτρεξα MySQL μέσω ονομασμένων Pipes και Windows έσπευσε από τις διαθέσιμες θύρες για να εξυπηρετήσει PHP. Προφανώς, στα Windows, έχετε 5000 θύρες για να εργαστείτε και μόλις ανοίξουν, παραμένουν έτσι για 120 δευτερόλεπτα πριν από την απελευθέρωση. Αυτό προκαλεί προβλήματα με την MySQL/Networking επειδή ζητείται μια νέα θύρα για κάθε σύνδεση.
Μπορείτε να διαβάσετε περισσότερα για το πρόβλημα στο:
(Σύνδεσμος πολύ καιρό και έπρεπε να διαλυθεί)
http: // dev.mysql.com/doc/refman/5.0/EN
/δεν μπορεί να συνδεθεί στον σέρβερ.html#can-not-connect-to-server-on-windows
?>
Δεδομένου ότι η MySQL βρίσκεται στο LocalHost, μπορώ απλώς να ενεργοποιήσω το όνομα-PIPES (που πρέπει να έχετε ρυθμίσει το MySQL εάν δεν χρειάζεστε δικτύωση) για να αντιμετωπίσετε το πρόβλημα αντί της λύσης που αναγράφεται σε αυτή τη σελίδα.
πρίν 20 χρόνια
Μόνο σε περίπτωση που δεν ήξερες. Μπορείτε να χρησιμοποιήσετε το mysql_connect σε μια συνάρτηση για να συνδεθείτε σε μια βάση δεδομένων και η σύνδεση είναι ένα σούπερ παγκόσμιο επίπεδο. Σημαίνει ότι μπορείτε να χρησιμοποιήσετε το MySQL_Query σε άλλες λειτουργίες ή σε καμία λειτουργία καθόλου και η PHP θα χρησιμοποιήσει τη σύνδεση που ανοίξατε. Αυτό είναι ένα εύχρηστο κομμάτι της γνώσης που βοηθά αν έχετε ένα μεγάλο site με πολλά σενάρια. Εάν δημιουργήσετε μία συνάρτηση για να συνδεθείτε σε ένα DB και να καλέσετε αυτή τη λειτουργία σε όλα τα σενάρια σας, διευκολύνει τη συντήρηση κώδικα, αφού πρέπει να ενημερώσετε μόνο μία γραμμή κώδικα για να αλλάξετε τη σύνδεση MySQL αντί να ενημερώνετε όλα τα σενάρια σας ξεχωριστά.
15 χρόνια πριν
Η χρήση των συνδέσεων MySQL μπορεί να γίνει δύσκολη με αντικείμενα. Χρησιμοποιώ το mysql_connect () σε μια τάξη βάσης δεδομένων που έγραψα και ο κλάδος Destructor καλεί mysql_close. Επειδή έχω πολλά από αυτά τα αντικείμενα βάσης δεδομένων, το mysql_connect επαναχρησιμοποιεί τις υπάρχουσες συνδέσεις. Αυτό είναι καλό, εκτός από το όταν το σενάριο φτάσει στο τέλος της εκτέλεσης και η συλλογή Garabage της PHP καλεί όλες τις λειτουργίες __Destruct () αντικειμένων. Το mysql_close () ρίχνει μια προειδοποίηση ότι η σύνδεση είναι άκυρη, στην περίπτωσή μου για ένα αντικείμενο. Αυτό συμβαίνει με αντικείμενα που χρησιμοποιούν μια υπάρχουσα σύνδεση, καθώς η σύνδεση έχει ήδη κλείσει. Επίλυσε το πρόβλημα αναγκάζοντας το mysql_connect () για να δημιουργήσω μια νέα σύνδεση κάθε φορά. Αυτό δεν είναι αποτελεσματικό, αλλά αρκεί για τους σκοπούς μου για τώρα.
Δεν θα έλεγα ότι αυτό είναι ένα σφάλμα per-se, αλλά είναι κάτι που πρέπει να κοιτάξουμε έξω. Φαντάζομαι ότι η χρήση του Mysqli είναι η απόλυτη λύση.
15 χρόνια πριν
Μερικές φορές, θέλω ότι η υπηρεσία MySQL ξεκινά αυτόματα όταν η εφαρμογή μου το χρειάζεται. Αυτό ισχύει ειδικά εάν εργάζεστε σε έναν αναπτυξιακό υπολογιστή ή/και σε ένα μικρό περιβάλλον intranet.
Μπορείτε να κάνετε κάτι τέτοιο: Εάν η συνάρτηση MySQL_Connect () επιστρέφει ψευδή, προσπαθήστε να αναγκάσετε την αρχικοποίηση της υπηρεσίας MySQL!
Για παράδειγμα, κάτω από τα Windows:
$ link = @ mysql_connect (διακομιστής $, $ user, $ pass);
αν (Empty ($ link)) @ exec ("%Systemroot%\\ System32 \\ net.exe ξεκινά mysql ");
ύπνος (5);
$ link = @ mysql_connect ($ servidor, $ usuario, $ clave);
>
?>
Στο Linux φυσικά μπορείτε να δοκιμάσετε "/etc/init.d/mysqld start "αλλά θα χρειαστείτε ειδικά δικαιώματα.
Πριν από 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 ('exxationing_db', $ db1);
$ db2 = mysql_connect ( . )
mysql_select_db ('not_existing_db', $ db2);
mysql_query (. , $ db2);
// δεν θα επιστρέψει σφάλματα και το ερώτημα δεν θα εκτελεστεί.
?>
Δώστε προσοχή και μπορείτε να εξοικονομήσετε λίγες ώρες εντοπισμού σφαλμάτων.
Πριν από 12 χρόνια
Εάν αντιμετωπίσετε προβλήματα ταχύτητας χρησιμοποιώντας αυτήν την εντολή σε έναν μακρινό διακομιστή, μπορείτε να προσθέσετε τη γραμμή "Skip-Name-Resolve" στο δικό μου.CNF για να το διορθώσετε.
Πριν από 19 χρόνια
Για να χρησιμοποιήσετε δεδομένα φορτίου τοπική λειτουργία Infile από το MySQL (στο MySQL 4.0.16, PHP 4.3.3), Ρυθμίστε την πέμπτη παράμετρο του mysql_connect () στο client_local_files (128), το οποίο βασίζεται στο MySQL C API (επίσης αρχείο φόρτωσης υποστήριξης του διακομιστή MySQL, ελέγξτε με "Εμφάνιση μεταβλητών όπως" local_infile "")
Ευχαριστώ 'phpweb στο eden2 dot com' για να το επισημάνετε
Πριν από 16 χρόνια
Η προσθήκη καταχωρήσεων στο HTTPD.Συνεχίστε να σταματήσετε .Τα αρχεία INC που εξυπηρετούνται από το Apache είναι σίγουρα χρήσιμα και συνιστώνται.
Αλλά δεν αλλάζει το γεγονός ότι αυτά τα αρχεία πρέπει να είναι ευανάγνωστα από το Apache, έτσι ώστε ο επεξεργαστής PHP να μπορεί να τα πάρει σε αυτά.
Όσο δεν έχετε πολλαπλούς, ενδεχομένως μη αξιόπιστοι, χρήστες στο μηχάνημά σας τότε είναι εντάξει. Αλλά όταν εκτελείτε μια μεγάλη υπηρεσία πολλαπλών χρηστών με χιλιάδες χρήστες είναι πάντα πιθανό ότι ένας από αυτούς θα κοιτάξει το δικό σας .αρχεία INC και λάβετε μια σημείωση των κωδικών πρόσβασης που έχετε σε αυτά. Θα μπορούσαν ακόμη και να τα αντιγράψουν στα δικά τους σενάρια και να τροποποιήσουν τις βάσεις δεδομένων σας!
Ακόμη και αν οι τοπικοί χρήστες είναι αξιόπιστοι, υπάρχει πάντα η δυνατότητα ενός απατεώνα σεναρίου (PHP ή κάποιας γλωσσικής γλώσσας) που εγκαθίσταται από έναν άγνοια χρήστη. Αυτό το σενάριο μπορεί στη συνέχεια να διαβάσει το δικό σας .Αρχεία INC (ανεξάρτητα από το αν βρίσκονται στο δέντρο εκδοτικής ιστού) και εκθέστε τον κωδικό πρόσβασής σας.
Πριν από 19 χρόνια
Μια άλλη λύση στα προβλήματα ασφαλείας της τοποθέτησης ονόματος χρήστη και κωδικών πρόσβασης σε σενάρια. Δεν έχω βρει αυτό το τεκμηριωμένο οπουδήποτε αλλού, έτσι σκέφτηκα ότι θα το πρότεινα για την ηλεκτρονική τεκμηρίωση. .
Μην τοποθετείτε κωδικούς πρόσβασης για το MySQL σε σενάρια που μπορούν να διαβαστούν από οποιονδήποτε χρήστη στο μηχάνημα. Αντ 'αυτού, τοποθετήστε τα σε ένα αρχείο διαμόρφωσης Apache και βεβαιωθείτε ότι δεν είναι αναγνώσιμο στον κόσμο. (Το Apache διαβάζει τα κύρια αρχεία ρυθμίσεων ως ρίζα.·
Για παράδειγμα, προσθέστε το στο httpd σας.Conf (και chmod σε 600 ή 660) τότε πείτε στο apache σας να επαναφορτωθεί τον εαυτό του (Apachectl χαριτωμένο).
php_value mysql.default_user fred
php_value mysql.default_password μυστικό
php_value mysql.Default_Host Server.παράδειγμα.com
Τότε το μόνο που χρειάζεστε στον κωδικό PHP σας είναι
$ handle = mysql_connect () ή πεθαίνει (mysql_error ());
Οι κωδικοί πρόσβασης κ.λπ. θα παραληφθούν μόνο με σενάρια που εκτελούνται στον κατάλογο που ονομάζεται (ή υπο-κατευθυντήρια). Το ίδιο μπορεί να γίνει για VirtualHosts κ.λπ.
Εάν δεν θέλετε να συνεχίσετε να επαναφορτίζετε τον διακομιστή Apache σας, τότε δοκιμάστε τα πράγματα που βάζετε τις οδηγίες PHP_VALUE σε ένα (World Readable) .αρχείο htaccess. (Σαφώς όχι για χρήση παραγωγής.·
Εάν πρέπει να εντοπίσετε σφάλματα τις τιμές που παρέχονται (ή όχι), χρησιμοποιήστε αυτό το απόσπασμα:
@syslog (log_debug, "Χρήση χρήστη =".ini_get ("mysql.default_user ").
"Pass =".ini_get ("mysql.default_password ").
"Host =".ini_get ("mysql.default_host "));
(Αυτό υποθέτει ότι δεν τρέχετε στο 'safe_mode' και ότι είστε σε ένα unix κάποιου είδους.·
Πριν από 12 χρόνια
Η κατάστασή μου: "Θα μπορούσα να συνδεθώ με το MySQL από την PHP μέσω Apache και MySQL μέσω της κονσόλας MySQL και δεν μπορούσα να συνδεθώ μέσω της PHP"
Όμως, η PHP μπορεί να συνδεθεί μόνο με το MySQL χρησιμοποιώντας το MySQL_Connect ("localhost", "root", "κωδικός πρόσβασης")
"Το SELINUX δεν επιτρέπει στο Apache να κάνει απομακρυσμένες συνδέσεις"
Λύση:
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 shutdown"). Στη συνέχεια ήμουν σε θέση να συνδεθώ με επιτυχία από το php -cli ("php -r" mysql_connect ('localhost', 'root', ''); ").
Βεβαιωθείτε ότι σταμάτησε, ξεκίνησα τον κανονικό διακομιστή από τη γραμμή εντολών, και αυτό ήταν τότε επιτυχής. Στη συνέχεια το σταμάτησα και το ξεκίνησα μέσω της ομάδας υπηρεσιών και όλα λειτούργησαν ακόμα.
Υποθέτω ότι όταν η υπηρεσία επανεκκινήθηκε αρχικά, υπήρχε ένα στοιχείο που είχε πεθάνει και αρνήθηκε να κλείσει, παρόλο που η υπηρεσία φάνηκε να σταματάει, αλλά το κλείσιμο μέσω του Mysqladmin σκότωσε τα πάντα εξ ολοκλήρου.
Πριν από 13 χρόνια
Σημειώστε ότι το όνομα Pipe στα Windows είναι άχρηστο από το PHP 5.3 και η σύνδεση TCP χρησιμοποιείται ακόμη και στο LocalHost.
Πριν από 16 χρόνια
Η ανάρτηση από το 'graham_rule at ed dot ac dot uk' θα πρέπει να περιλαμβάνει την ακόλουθη προειδοποίηση:
Waring: Οι τιμές αυτών των οδηγιών θα εκτεθούν εάν κάποιος από τους κώδικες περιλαμβάνει τη συνάρτηση phpinfo ().
Η συνάρτηση phpinfo () θα εκτυπώσει αυτές τις τιμές σαφείς ως ημέρα. Προτείνω ιδιαίτερα εναντίον αυτής της μεθόδου αποθήκευσης πληροφοριών ελέγχου ταυτότητας MySQL.
Συνιστώ τη δημιουργία λειτουργιών σύνδεσης και καθαρισμού σε ξεχωριστό αρχείο. Εάν η ασφάλεια είναι ανησυχητική, εντοπίστε το αρχείο συμπεριφοράς εκτός του φακέλου ρίζας ιστού σας.
λειτουργία getMyConnection ()
Global $ g_link;
αν ($ g_link)
επιστροφή $ g_link;
$ g_link = mysql_connect ('host.Όνομα ',' User ',' Password ') ή πεθαίνει (' Δεν μπόρεσε να συνδεθεί με τον διακομιστή.');
mysql_select_db ('database_name', $ g_link) ή die ('Δεν μπόρεσε να επιλέξει βάση δεδομένων.');
επιστροφή $ g_link;
>
Λειτουργία CleanUpDB ()
Global $ g_link;
αν ($ g_link != ψευδής)
mysql_close ($ g_link);
$ g_link = false;
>
?>
Απλώς συμπεριλάβετε τη σύνδεσή σας.Το αρχείο 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'])
<
Case 'Server1.παράδειγμα.com ':
mysqlConnect ('host1', 'user1', 'password1');
mysql_select_db ('db1');
Διακοπή;
Case 'Server2.παράδειγμα.com ':
mysqlConnect ('host2', 'user2', 'password2');
mysql_select_db ('db2');
Διακοπή;
>
?>
Αυτό κάνει μια υπό όρους σύνδεση με τη βάση δεδομένων MySQL. Επιλέγει αυτόματα τον σωστό διακομιστή σύμφωνα με το όνομα του διακομιστή από το πού εκτελείται το σενάριό σας.
Ας ελπίσουμε ότι σας αρέσει αυτή η φορητή διαμόρφωση.
Πριν από 16 χρόνια
Εάν προτιμάτε να χρησιμοποιήσετε ένα όνομα κεντρικού υπολογιστή αντί για ένα IP στη συμβολοσειρά σύνδεσής σας σε ένα σενάριο (για να μπορείτε να αλλάξετε το IP κατά βούληση), αλλά δεν θέλετε τα γενικά έξοδα αναζήτησης DNS, απλώς προσθέστε το στο αρχείο/etc/hosts σας (σε Windows:.
Για παράδειγμα, προσθέστε τα ακόλουθα στο αρχείο Hosts σας (αλλάζοντας το ψεύτικο IP στην πραγματική IP του διακομιστή σας):
ΣΗΜΕΙΩΣΗ: Στο Linux, βεβαιωθείτε ότι έχετε "παραγγελία: κεντρικοί υπολογιστές, δεσμεύσεις" στο /etc /host.αρχείο cond.
Σε ένα σενάριο, κάντε τη σύνδεση MySQL όπως έτσι:
$ sid = mysql_connect ("mysqlserver1", "user", "pass");
?>
Σημείωση: Αυτό το δείγμα είναι σε PHP, αλλά μπορεί να είναι οποιαδήποτε άλλη γλώσσα προγραμματισμού (απλά πληκτρολογήστε "ping mysqlserver1" σε προτροπή, στο διακομιστή σας)
Και εκεί το έχετε! Εάν ο διακομιστής σας έχει εκχωρηθεί ποτέ διαφορετική IP, απλώς ενημερώστε το αρχείο Hosts με το νέο (κάθε σενάριο θα λειτουργήσει όπως είναι, ακόμη και αν κάτω από διαφορετικά ονόματα κεντρικού υπολογιστή).
10 ΧΡΟΝΙΑ πριν
Μια μικρή σημείωση εάν τα σενάρια σας κοιμούνται πολύ, θέλετε να τρέξετε ακριβώς την ίδια δήλωση SQL 2+ φορές και έχετε πολύ σφάλμα το "MySQL έχει απομακρυνθεί".
Δοκιμάστε να ρυθμίσετε την 4η παράμετρο σε αληθινή, καθώς φαίνεται ότι μερικές φορές η PHP δεν εντοπίζει αυτό το αναγνωριστικό πόρων που χρησιμοποιείται για την τελευταία ίδια αναζήτηση είναι τώρα dud και έτσι προσπαθεί να το χρησιμοποιήσει, παρακάμπτοντας έτσι τις δοκιμές όπως το is_resource () και προκαλώντας αποτυχία.
Αυτό συμβαίνει όταν το mysql_ping () δεν λειτουργεί για την κατάστασή σας φυσικά.
Πριν από 18 χρόνια
Στο MySQL4.1 και αργότερα, η προεπιλεγμένη μορφή hashing κωδικού πρόσβασης έχει αλλάξει καθιστώντας το ασυμβίβαστο με 3.x Πελάτες.
Ανακάλυψα ότι το mysql_connect () λειτουργεί σε εκδόσεις διακομιστή> = 4.1 Όταν ο κωδικός πρόσβασης χρήστη MySQL είναι κενός, επειδή ο έλεγχος ταυτότητας κωδικού πρόσβασης δεν γίνεται σε αυτή την περίπτωση, διαφορετικά πρέπει να χρησιμοποιήσετε μια άλλη μέθοδο σύνδεσης (e.σολ. mysqli).
Επίσης, αν χρησιμοποιείτε παλιούς πίνακες MySQL σε ένα νέο διακομιστή (i.μι. Οι κωδικοί πρόσβασης αποθηκεύονται στην παλιά μορφή), τότε ο διακομιστής θα χρησιμοποιήσει αυτόματα την παλιά μέθοδο Auth και αυτή η λειτουργία θα πρέπει να λειτουργεί σε όλες τις περιπτώσεις.
Ας ελπίσουμε ότι αυτό θα βοηθήσει κάποιον, με είχε μπερδευτεί για λίγο, επειδή μερικοί από τους χρήστες στα 4 μου.1 διακομιστής θα μπορούσε να συνδεθεί και μερικοί δεν μπορούσαν.
Πριν από 16 χρόνια
Αναρωτηθήκατε ποτέ τι είναι το "προεπιλεγμένο όνομα χρήστη"?
$ link = mysql_connect () ή πεθαίνει (mysql_error ());
$ αποτέλεσμα = mysql_query ("Select session_user (), current_user ();");
$ row = mysql_fetch_row ($ αποτέλεσμα);
Echo "User Session:", $ Row [0], "
\ n ";
echo "Τρέχων χρήστης:", $ Row [1], "
\ n ";
?>
Και οι δύο είναι ODBC@localhost στην εγκατάσταση Win2K μου, οπότε η συμβουλή μου για τα Windows είναι:
- Δημιουργήστε έναν χρήστη MySQL που ονομάζεται ODBC χωρίς κωδικό πρόσβασης
- Προσθέστε το LocalHost στο χρήστη ODBC [δεξί κλικ ODBC]
- Ρυθμίστε το σχήμα Previleges στο 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 της λειτουργίας ($ query, $ db, $ nocon)
αν ($ nocon != "nocon")
αν ($ db != "") Σύνδεση ($ db);
else σύνδεση ("pascal_crm");
$ αποτέλεσμα = mysql_query ($ query);
$ err = mysql_error ();
αν ($ err != "") echo "σφάλμα = $ err";
αν ($ nocon != "nocon")
mysql_close ();
επιστροφή $ αποτέλεσμα?
>
Πριν από 17 χρόνια
Συνδεθείτε στο MySQL μέσω του ονόματος σωλήνα κάτω από τα Windows:
στο δικό μου.ini, προσθέστε αυτό:
Στη συνέχεια, συνδεθείτε στο διακομιστή και, στη συνέχεια, συνδεθείτε με τη χρήση της MySQL
Πριν από 14 χρόνια
Όταν συνδέεστε και αναμένετε να χρησιμοποιήσετε μια αποθηκευμένη διαδικασία, πρέπει να περάσετε μια ειδική σημαία στο MySQL μέσω της εντολής Connect, διαφορετικά δεν θα λάβετε τα αποτελέσματα που επιστρέφονται και θα οδηγήσει σε αυτό το σφάλμα:
Διαδικασία Alexgrim.Το GetStats_forumCategories δεν μπορεί να επιστρέψει ένα αποτέλεσμα που έχει οριστεί στο δεδομένο πλαίσιο
Για να το διορθώσετε, αλλάξτε τη συμβολοσειρά σύνδεσης, προσθέτοντας ", False, 65536" ως τα τελευταία 2 πεδία:
$ 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 Server έχει φύγει και χρησιμοποιείτε το mysql_connect () και το pcntl_fork (), κάντε το shure ότι επανασυνδέεστε στον διακομιστή MySQL με κάθε δημιουργημένο παιδί που εσείς το πιρούνι () ED.
Τράβηξα τα μαλλιά μου για πολλές μέρες επειδή χρησιμοποιούσα την ίδια σύνδεση MySQL για κάθε παιδί και πήρε ότι ο "MySQL Server έχει φύγει" σφάλματα.
Εδώ είναι ένα απλό παράδειγμα:
$ link = mysql_connect ($ db_server, $ db_user, $ db_pass);
mysql_select_db ($ db_database, $ link));
$ pid = pcntl_fork ();
αν ($ pid == - 1)
// Παιδί σφαλμάτων
elseif ($ pid) // Ο γονέας θα είναι εδώ
> else // Το παιδί πρέπει να καταργήσει μια νέα σύνδεση * mysql.
// Εάν χρησιμοποιείτε mysql_connect χωρίς την 4η παράμετρο
// τότε θα χρησιμοποιήσει τη σύνδεση από τον γονέα. Αλλά
// Εάν το παιδί πεθάνει, η σύνδεση δεν θα είναι μη διαθέσιμη
// ο γονέας επίσης.
// Έτσι, σημειώστε την "αληθινή" ως 4η παράμετρο.
$ newlink = mysql_connect ($ db_server, $ db_user, $ db_pass, true);
mysql_select_db ($ db_database, $ newlink));
// .
>
?>
15 χρόνια πριν
[Επεξεργασία από το Danbrown στο PHP Dot Net: Το ζήτημα που απεικονίζει αυτός ο χρήστης είναι ένα κοινό πρόβλημα όταν ασχολείστε με πολλαπλές βάσεις δεδομένων από την PHP. Σημειώστε τα σχόλιά του στο τέλος του κώδικα για μια εξήγηση.]
Φαίνεται ότι έμαθα αυτό με τον σκληρό τρόπο:
// Δημιουργία σύνδεσης με διακομιστή master db
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.
// Θα βγείτε από το Sync DB σε ολόκληρο το σύμπλεγμα σας, εκτός εάν ορίσετε ρητά όλους τους πόρους σύνδεσης
Πριν από 11 χρόνια
Μετά την αναβάθμιση της MySQL σε 5 σε 5.5.21 από 5.0.9 στο CentOS, το WinXP σταμάτησε να είναι σε θέση να συνδεθεί με τον κεντρικό υπολογιστή με το μήνυμα σφάλματος
«Κακή χειραψία».
Η ενδεχόμενη λύση στο πρόβλημα ήταν η κατάργηση του mysql_client_ssl από την κλήση στο mysql_connect ().
Θα το αναφέρω επίσης ως σφάλμα.
Πριν από 14 χρόνια
Εάν προσπαθείτε να συνδεθείτε σε έναν απομακρυσμένο διακομιστή, εδώ είναι μερικά πράγματα που μπορούν να πάνε στραβά. Ίσως αυτή η λίστα να σώσει κάποιον κάποια στιγμή:
1. Μπορεί να χρειαστεί να έρθετε σε επαφή με την τεχνική υποστήριξη του απομακρυσμένου διακομιστή:
ένα. Για να βεβαιωθείτε ότι μπορείτε να περάσετε από το τείχος προστασίας του. Δεν είναι απαραίτητα αρκετό να αναφέρεται ο αριθμός του διακομιστή σας στη λίστα κεντρικού υπολογιστή CPANEL Remote Access του Site. Εξαρτάται από τον τρόπο με τον οποίο η εταιρεία διακομιστή έχει δημιουργήσει τα πράγματα
σι. Για να μάθετε ποιος αριθμός θύρας χρησιμοποιεί για συνδέσεις βάσης δεδομένων, οι οποίες μπορεί να μην είναι η προεπιλογή που χρησιμοποιείται από το mysql_connect;
ντο. Εάν χρησιμοποιείτε το ODBC, ο κεντρικός υπολογιστής στον οποίο προσπαθείτε να συνδεθείτε μπορεί ή δεν μπορεί να έχει εγκατεστημένους οδηγούς ODBC. και
ρε. Εάν εργάζεστε από μια δυναμική IP, ενδέχεται να έχουν ρυθμιστεί για να το φιλοξενήσουν ή ίσως χρειαστεί να χρησιμοποιήσετε πληρεξούσιο. Δείτε το http: // forge.mysql.com/wiki/mysql_proxy .
2. Εάν εργάζεστε από έναν κοινό διακομιστή, ο αριθμός του διακομιστή που σας αποστέλλεται στην επιστολή εγγραφής δεν είναι ο αριθμός διακομιστή που θα πρέπει να χρησιμοποιείτε για να συνδεθείτε σε μια απομακρυσμένη βάση δεδομένων. Χρειάζεστε τον αριθμό διακομιστή του μηχανήματος στο οποίο κάθεται ο ιστότοπός σας, όχι ο αριθμός διακομιστή του εικονικού λογαριασμού σας σε αυτό το μηχάνημα. Μπορείτε να το πάρετε από τη δική σας τεχνική υποστήριξη.
Είμαι ευγνώμων στον Jonathan Jones στο Bluehost για αυτήν την ανάλυση.