Σε αυτό το άρθρο, θα δούμε πώς να χρησιμοποιήσετε την PHP για την εισαγωγή σειρών σε μια βάση δεδομένων MySQL.

Βήμα 1 - Δημιουργία πίνακα

Πρώτα πρέπει να δημιουργήσετε έναν πίνακα για τα δεδομένα. Αυτή είναι μια απλή διαδικασία που μπορεί να πραγματοποιηθεί με χρησιμοποιώντας phpMyAdminστον πίνακα ελέγχου φιλοξενίας.

Αφού συνδεθείτε στο phpMyAdmin, θα δείτε μια διεπαφή όπως αυτή:

Ας δημιουργήσουμε έναν πίνακα με το όνομα Students στη βάση δεδομένων u266072517_name κάνοντας κλικ στο κουμπί "Δημιουργία πίνακα". Μετά από αυτό θα δούμε ΝΕΑ ΣΕΛΙΔΑ, στο οποίο ορίσαμε όλες τις απαραίτητες παραμέτρους πίνακα:

Αυτή είναι η απλούστερη ρύθμιση που μπορεί να χρησιμοποιηθεί για τραπέζι και λήψη Επιπλέον πληροφορίεςσχετικά με τη δομή των πινάκων/βάσεων δεδομένων.

Επιλογές στηλών:

  • Όνομα είναι το όνομα της στήλης που εμφανίζεται στην κορυφή του πίνακα.
  • Τύπος είναι ο τύπος της στήλης. Για παράδειγμα, επιλέξαμε varchar επειδή θα εισάγουμε τιμές συμβολοσειράς.
  • Μήκος/Τιμές - χρησιμοποιείται για τον καθορισμό του μέγιστου μήκους που μπορεί να έχει μια καταχώρηση σε αυτήν τη στήλη.
  • Ευρετήριο - Χρησιμοποιήσαμε ένα "Κύριο" ευρετήριο για το πεδίο "ID". Κατά τη δημιουργία ενός πίνακα, συνιστάται να χρησιμοποιείται μόνο μία στήλη ως πρωτεύον κλειδί. Χρησιμοποιείται για τη λίστα των εγγραφών σε έναν πίνακα και απαιτείται κατά τη ρύθμιση του πίνακα. Σημείωσα επίσης "A_I", που σημαίνει "Auto Increment" - η επιλογή αυτόματης εκχώρησης του αριθμού των εγγραφών (1,2,3,4...).
    Κάντε κλικ στο κουμπί Αποθήκευση και ο πίνακας θα δημιουργηθεί.

Βήμα 2. Γράψιμο κώδικα PHP για την εισαγωγή δεδομένων στη MySQL.

Επιλογή 1 - Μέθοδος MySQLi

Πρώτα πρέπει να δημιουργήσετε μια σύνδεση με τη βάση δεδομένων. Μετά από αυτό, χρησιμοποιούμε το ερώτημα SQL INSERT. Παράδειγμα πλήρους κώδικα:

" . mysqli_error($conn); ) mysqli_close($conn); ?>

Το πρώτο μέρος του κώδικα (γραμμή 3 - 18) είναι για σύνδεση στη βάση δεδομένων.

Ας ξεκινήσουμε με τη γραμμή #19:

$sql = "INSERT INTO Students (όνομα, επώνυμο, email) ΤΙΜΕΣ ("Thom", "Vial", " [email προστατευμένο]")";

Εισάγει δεδομένα σε Βάση δεδομένων MySQL. Το INSERT INTO είναι μια πρόταση που προσθέτει δεδομένα στον καθορισμένο πίνακα. Στο παράδειγμά μας, δεδομένα προστίθενται στον πίνακα Students.

Στη συνέχεια ακολουθεί η απαρίθμηση των στηλών στις οποίες εισάγονται οι τιμές: όνομα, επίθετο, email. Τα δεδομένα θα προστεθούν με την καθορισμένη σειρά. Αν είχαμε γράψει (email, επώνυμο, όνομα), οι τιμές θα είχαν προστεθεί με διαφορετική σειρά.

Το επόμενο μέρος είναι η δήλωση VALUES. Εδώ καθορίζουμε τις τιμές για τις στήλες: όνομα = Thom, επώνυμο = Φιαλίδιο, email = [email προστατευμένο]

Έχουμε εκτελέσει ένα ερώτημα χρησιμοποιώντας κώδικα PHP. ΣΤΟ κώδικα προγράμματοςΤα ερωτήματα SQL πρέπει να διαφεύγουν με εισαγωγικά. Το επόμενο μέρος του κωδικού (γραμμή 20-22) ελέγχει εάν το αίτημά μας ήταν επιτυχές:

if (mysqli_query($conn, $sql)) ( echo "Η νέα εγγραφή δημιουργήθηκε με επιτυχία"; )

Αυτός ο κωδικός εμφανίζει ένα μήνυμα ότι το αίτημα ήταν επιτυχές.

Και το τελευταίο μέρος (γραμμή 22 - 24) εμφανίζει μια ειδοποίηση εάν το αίτημα δεν ήταν επιτυχές:

else ( echo "Σφάλμα: " . $sql . "
" .mysqli_error($conn); )

Επιλογή 2 - Μέθοδος αντικειμένου δεδομένων PHP (PDO)

Πρώτα πρέπει να συνδεθούμε στη βάση δεδομένων δημιουργώντας ένα νέο αντικείμενο PDO. Όταν εργαζόμαστε με αυτό, θα χρησιμοποιήσουμε διάφορες μεθόδουςΠ.Ο.Π. Οι μέθοδοι αντικειμένων ονομάζονται ως εξής:

$the_Object->the_Method();

Το PDO σάς επιτρέπει να "προετοιμάζετε" κώδικα SQL πριν εκτελεστεί. Το ερώτημα SQL αξιολογείται και "διορθώνεται" πριν εκτελεστεί. Για παράδειγμα, η απλούστερη επίθεση ένεσης SQL μπορεί να πραγματοποιηθεί με απλή εισαγωγή κώδικα SQL σε ένα πεδίο φόρμας. Για παράδειγμα:

Δεδομένου ότι αυτή είναι συντακτικά σωστή SQL, το ερωτηματικό κάνει το DROP DATABASE user_table ένα νέο ερώτημα SQL και ο πίνακας χρηστών απορρίπτεται. Οι προετοιμασμένες εκφράσεις (δεσμευμένες μεταβλητές) δεν επιτρέπουν σε ερωτηματικά και εισαγωγικά να τερματίσουν το αρχικό ερώτημα. Επομένως, η εντολή DROP DATABASE δεν θα εκτελεστεί ποτέ.

Για να χρησιμοποιήσετε έτοιμες δηλώσεις, πρέπει να γράψετε μια νέα μεταβλητή που καλεί τη μέθοδο προετοιμασίας() του αντικειμένου της βάσης δεδομένων.

Σωστός κωδικός:

getMessage(); ) // Ορίστε μεταβλητές για το άτομο που θέλουμε να προσθέσουμε στη βάση δεδομένων $first_Name = "Thom"; $last_Name = "Φιαλίδιο"; $email = " [email προστατευμένο]"; // Δημιουργήστε μια μεταβλητή που καλεί τη μέθοδο προετοιμασία() του αντικειμένου της βάσης δεδομένων // Το ερώτημα SQL που θέλετε να εκτελέσετε εισάγεται ως παράμετρος και οι θέσεις κράτησης θέσης γράφονται ως εξής: placeholder_name $my_Insert_Statement = $my_Db_Connection->prepare( "INSERT INTO Students (όνομα, επώνυμο, email) VALUES (:first_name, :last_name, :email)"); // Τώρα λέμε στο σενάριο σε ποια μεταβλητή αναφέρεται κάθε σύμβολο κράτησης θέσης προκειμένου να χρησιμοποιηθεί η μέθοδος bindParam() // Η η πρώτη παράμετρος είναι το σύμβολο κράτησης θέσης στην παραπάνω δήλωση , η δεύτερη είναι η μεταβλητή που πρέπει να αναφέρεται στο $my_Insert_Statement->bindParam(:first_name, $first_Name); $my_Insert_Statement->bindParam(:last_name, $last_Name); $my_Insert_bindramment> (:email, $email); // Εκτελέστε το ερώτημα χρησιμοποιώντας τα δεδομένα που μόλις ορίσαμε // Η μέθοδος execute() επιστρέφει TRUE εάν επιτύχει και FALSE εάν δεν το έκανε, αφήνοντάς σας να εκτυπώσετε το δικό σας μήνυμα εάν ($my_Insert_Statement ->execute()) ( echo "New reco rdδημιουργήθηκε με επιτυχία"; ) else ( echo "Δεν είναι δυνατή η δημιουργία εγγραφής"; ) // Σε αυτό το σημείο, μπορείτε να αλλάξετε τα δεδομένα της μεταβλητής και να εκτελέσετε ένα ερώτημα για να προσθέσετε περισσότερα δεδομένα στα δεδομένα της βάσης δεδομένων στη βάση δεδομένων $first_Name = "John"; $last_Name = "Σμιθ"; $email = " [email προστατευμένο]"; $my_Insert_Statement->execute(); // Εκτέλεση ξανά όταν αλλάξει η μεταβλητή εάν ($my_Insert_Statement->execute()) (echo "New recordcreatedsuccessfully"; ) else (echo "Δεν είναι δυνατή η δημιουργία εγγραφής";

Στις γραμμές 28, 29 και 30 χρησιμοποιούμε τη μέθοδο bindParam() του αντικειμένου της βάσης δεδομένων. Υπάρχει επίσης μια μέθοδος bindValue(), η οποία είναι πολύ διαφορετική από την προηγούμενη.

  • bindParam() - Αυτή η μέθοδος αξιολογεί τα δεδομένα όταν επιτευχθεί η μέθοδος execute(). Την πρώτη φορά που το σενάριο φτάνει στη μέθοδο execute(), βλέπει ότι το $first_Name ταιριάζει με το "Thom". Στη συνέχεια δεσμεύει αυτήν την τιμή και εκτελεί το ερώτημα. Όταν το σενάριο φτάσει στη δεύτερη μέθοδο execute(), βλέπει ότι το $first_Name ταιριάζει πλέον με το "John". Στη συνέχεια δεσμεύει αυτήν την τιμή και εκτελεί ξανά το ερώτημα με νέες τιμές. Είναι σημαντικό να θυμόμαστε ότι κάποτε ορίσαμε ένα ερώτημα και το χρησιμοποιήσαμε ξανά με διαφορετικά δεδομένα σε διαφορετικά σημεία του σεναρίου.
  • bindValue() - Αυτή η μέθοδος αξιολογεί τα δεδομένα μόλις επιτευχθεί η bindValue(). Επειδή το $first_Name ορίστηκε σε "Thom", όταν επιτευχθεί η bindValue(), θα χρησιμοποιείται κάθε φορά που καλείται η μέθοδος execute() στο $my_Insert_Statement.
    Σημειώστε ότι επαναχρησιμοποιούμε τη μεταβλητή $first_Name και της εκχωρούμε μια νέα τιμή για δεύτερη φορά. Μετά την εκτέλεση του σεναρίου, και τα δύο ονόματα θα παρατίθενται στη βάση δεδομένων, παρά το γεγονός ότι η μεταβλητή $first_Name στο τέλος του σεναρίου έχει την τιμή "John". Να θυμάστε ότι η PHP ελέγχει ολόκληρο το σενάριο πριν το εκτελέσει.

Εάν ενημερώσετε το σενάριο για να αντικαταστήσετε το bindParam με το bindValue, θα εισαγάγετε το "Thom Vial" δύο φορές στη βάση δεδομένων και ο John Smith θα αγνοηθεί.

Βήμα 3 - Επιβεβαιώστε την επιτυχία και επίλυση προβλημάτων

Εάν το αίτημα για εισαγωγή σειρών στη βάση δεδομένων ήταν επιτυχές, θα δούμε το ακόλουθο μήνυμα:

Αντιμετώπιση προβλημάτων κοινών σφαλμάτων

MySQLi

Σε κάθε άλλη περίπτωση, θα εμφανιστεί ένα μήνυμα σφάλματος. Για παράδειγμα, ας κάνουμε ένα συντακτικό σφάλμα στον κώδικα και λαμβάνουμε το εξής:

Το πρώτο μέρος του κώδικα είναι εντάξει, η σύνδεση πραγματοποιήθηκε με επιτυχία, αλλά το ερώτημα SQL απέτυχε.

"Σφάλμα: INSERT INTO Students (όνομα, επώνυμο, email) VALUES ("Thom", "Vial", " [email προστατευμένο]") Έχετε ένα σφάλμα στη σύνταξη SQL, ελέγξτε το εγχειρίδιο που αντιστοιχεί στην έκδοση του διακομιστή MySQL για τη χρήση της σύνταξης δικαιωμάτων κοντά στο "(όνομα, επώνυμο, email) VALUES ("Thom", "Vial", " [email προστατευμένο]")" στη γραμμή 1"

Παρουσιάστηκε ένα συντακτικό σφάλμα που προκάλεσε την αποτυχία του σεναρίου. Το σφάλμα ήταν εδώ:

$sql = "INSERT INTO Students (όνομα, επώνυμο, email) ΤΙΜΕΣ ("Thom", "Vial", " [email προστατευμένο]")";

Χρησιμοποιήσαμε σγουρά τιράντες αντί για κανονικά σιδεράκια. Αυτό είναι λάθος και το σενάριο έδωσε ένα συντακτικό σφάλμα.

Π.Ο.Π

Στη γραμμή 7 της σύνδεσης PDO, η λειτουργία σφάλματος έχει ρυθμιστεί σε "εμφάνιση όλων των εξαιρέσεων". Εάν είχε οριστεί άλλη τιμή και το αίτημα αποτύγχανε, δεν θα λαμβάναμε μηνύματα σφάλματος.

Αυτή η ρύθμιση θα πρέπει να χρησιμοποιείται μόνο κατά την ανάπτυξη ενός σεναρίου. Όταν είναι ενεργοποιημένο, ενδέχεται να εμφανίζονται ονόματα βάσεων δεδομένων και πινάκων, τα οποία είναι καλύτερα να διατηρούνται κρυφά για λόγους ασφαλείας. Στην περίπτωση που περιγράφεται παραπάνω, όταν χρησιμοποιήθηκαν σγουρές αγκύλες αντί για κανονικές αγκύλες, το μήνυμα σφάλματος μοιάζει με αυτό:

Μοιραίο σφάλμα: Uncaughtexception "PDOException" με μήνυμα "SQLSTATE: Σφάλμα σύνταξης ή παραβίαση πρόσβασης: 1064 Έχετε ένα σφάλμα στη σύνταξη SQL. ελέγξτε το εγχειρίδιο που αντιστοιχεί στην έκδοση του διακομιστή MySQL για τη σύνταξη δικαιωμάτων που θα χρησιμοποιήσετε κοντά στο "(όνομα, επώνυμο, email) VALUES ("Thom", "Vial", " [email προστατευμένο]")" στη γραμμή 1"

Άλλα πιθανά προβλήματα:

  • Οι στήλες προσδιορίζονται εσφαλμένα (ανύπαρκτες στήλες ή ορθογραφικό λάθος στα ονόματά τους).
  • Ένας τύπος τιμής εκχωρείται σε στήλη άλλου τύπου. Για παράδειγμα, εάν προσπαθήσετε να εισαγάγετε τον αριθμό 47 στη στήλη Όνομα, θα λάβετε ένα σφάλμα. Αυτή η στήλη πρέπει να χρησιμοποιεί μια τιμή συμβολοσειράς. Αλλά αν προσδιορίζαμε έναν αριθμό σε εισαγωγικά (για παράδειγμα, "47") θα λειτουργούσε, επειδή είναι μια συμβολοσειρά.
  • Έγινε προσπάθεια εισαγωγής δεδομένων σε πίνακα που δεν υπάρχει. Καθώς και ένα ορθογραφικό λάθος στο όνομα του πίνακα.

Μετά την επιτυχή εισαγωγή των δεδομένων, θα δούμε ότι έχουν προστεθεί στη βάση δεδομένων. Παρακάτω είναι ένα παράδειγμα πίνακα όπου έχουν προστεθεί δεδομένα.

Από τον συγγραφέα:Ω, δεν μπορείς να πετάξεις λέξεις από ένα τραγούδι! Αλλά μπορούν να διαγραφούν, να ενημερωθούν ή να εισαχθούν από άλλους. Το κύριο πράγμα είναι ότι οι λέξεις εισάγονται στη βάση δεδομένων. Σήμερα θα σας πούμε πώς γράφονται τα δεδομένα στη MySQL και πώς να το κάνετε σωστά ώστε να ακούγεται το τραγούδι!

Προσθήκη καταχωρήσεων με το phpMyAdmin

Το κέλυφος phpMyAdmin για τη διαχείριση του MySQL DBMS υλοποιεί μια «ελαφριά» λειτουργία για την προσθήκη νέων εγγραφών σε πίνακες βάσεων δεδομένων. Λόγω της απλότητάς του, είναι ιδανικό τόσο για πράσινα «ανδρείκελα» όσο και για «τεμπέληδες» επαγγελματίες.

Για να εισαγάγετε νέες πληροφορίες στον πίνακα, θα πρέπει να εισέλθετε στο πρόγραμμα με δικαιώματα διαχειριστή. Στη συνέχεια, στις λίστες στα αριστερά, επιλέξτε τη βάση δεδομένων και τον πίνακα που θέλετε. Στη συνέχεια, στο επάνω μενού, περάστε από το στοιχείο "Εισαγωγή".

Μετά από αυτό, για να κάνετε εγγραφή στη βάση δεδομένων MySQL, συμπληρώστε το επόμενο παράθυρο για όλες τις στήλες του πεδίου "Τιμή" και κάντε κλικ στο "OK" στο κάτω μέρος.

Το παραπάνω στιγμιότυπο οθόνης δείχνει ότι ο τροποποιημένος πίνακας "Ζώα" αποτελείται από δύο στήλες (πεδία): id και όνομα. Η δεύτερη ενότητα καθορίζει τον τύπο καθεμιάς από τις στήλες. Χρειάζεται μόνο να εισαγάγουμε μια τιμή για το πεδίο ονόματος, επειδή η στήλη id είναι το πρωτεύον κλειδί και ορίστηκε σε αυτόματη αύξηση κατά τη δημιουργία του πίνακα. Αυτό σημαίνει ότι η τιμή του πεδίου id θα δημιουργηθεί αυτόματα από τη MySQL, προσθέτοντας 1 στην προηγούμενη ακέραια τιμή.

Για να μάθετε ποιο πεδίο εγγραφών δεδομένων στη MySQL είναι το πρωτεύον κλειδί (πρωτεύον κλειδί), στο phpMyAdmin, μεταβείτε στο μενού (με τον επιλεγμένο πίνακα στα αριστερά στη λίστα) στην επάνω καρτέλα μενού "Δομή". Ακολουθεί μια περιγραφή όλων των πεδίων του πίνακα, του τύπου και των πρόσθετων χαρακτηριστικών τους.

Εισαγωγή δεδομένων με χρήση ερωτημάτων SQL

Αλλά το phpMyAdmin είναι απλώς ένα περιτύλιγμα και οι πραγματικοί διαχειριστές "μιλούν" στον διακομιστή MySQL χρησιμοποιώντας τη γλώσσα δομημένης ερωτημάτων. Δηλαδή, «μιλούν» μαζί του στη γλώσσα SQL. Δεδομένου ότι προσπαθούμε να γίνουμε πραγματικοί επαγγελματίες, θα «βουτήξουμε» λίγο στη μελέτη των εντολών SQL στο πλαίσιο του θέματος που εξετάζουμε. Εδώ είναι ένα ερώτημα, εισάγοντας το οποίο στο πεδίο "SQL", θα δημιουργήσετε την ίδια βάση δεδομένων:

CREATE TABLE Animal (ID MEDIUMINT NOT NULL AUTO_INCREMENT, όνομα CHAR(30) NOT NULL, PRIMARY KEY (id));

CREATE TABLE Animal (αναγνωριστικό MEDIUMINT NOT NULL AUTO_INCREMENT ,

όνομα CHAR (30 ) NOT NULL , PRIMARY KEY (id ) ) ;

Αφού δημιουργήσετε έναν πίνακα και εγγράψετε δεδομένα στη βάση δεδομένων MySQL (μέσω της καρτέλας "Εισαγωγή"), το πρόγραμμα θα σας ενημερώσει ότι έχει προστεθεί μια γραμμή με τιμή αναγνωριστικού 1. Και λίγο πιο κάτω στο παράθυρο του επεξεργαστή, το Θα εμφανιστεί ο κώδικας ερωτήματος, τον οποίο το κέλυφος δημιούργησε για εμάς και τον έστειλε στον διακομιστή της βάσης δεδομένων .

Κωδικός αιτήματος:

INSERT INTO `my_db1`.`animal` (`id`, `name`) ΤΙΜΕΣ (NULL, "Cat");

ΕΙΣΑΓΩΓΗ ΣΤΟ `my_db1`. ` animal ` (` id ` , ` name ` ) VALUES (NULL , "Cat" ) ;

Ας το μελετήσουμε πιο αναλυτικά. Η SQL χρησιμοποιεί την πρόταση INSERT για να εισαγάγει μια νέα σειρά σε έναν πίνακα. Λέει στον διακομιστή ότι στον πίνακα της βάσης δεδομένων (my_db1 . animal) πρέπει να εισαγάγετε τις καθορισμένες τιμές στα πεδία αναγνωριστικού και ονόματος (VALUES (NULL, 'Cat').

Λάβετε υπόψη ότι δεν καθορίζουμε αριθμητική τιμή για τη στήλη id, αλλά NULL, αφού «ενεργοποιήσαμε» την αυτόματη συμπλήρωση (αυτόματη αύξηση) για αυτό το πεδίο.

Πώς να εισαγάγετε μια ανάρτηση χρησιμοποιώντας PHP

Όλα όσα έχουμε εξετάσει είναι μόνο ένα «προοίμιο» της κύριας δράσης, στην οποία η «Υψηλότατη» η γλώσσα προγραμματισμού PHP από την πλευρά του διακομιστή μπαίνει στη σκηνή. Είναι χάρη σε αυτόν που η MySQL ως DBMS έχει γίνει τόσο διαδεδομένη στον Ιστό.
Ένα μεγάλο μέρος του Παγκόσμιου Ιστού είναι χτισμένο σε μια δέσμη από αυτές τις δύο τεχνολογίες Διαδικτύου. Όπου και να ψάξετε, θα τα βρείτε παντού: σε σύγχρονο CMS, «αυτογράφους» μηχανές και στον διακομιστή.

Δεν αποτελεί έκπληξη το γεγονός ότι η PHP παρέχει τόσες πολλές ενσωματωμένες λειτουργίες για την εγγραφή δεδομένων στη MySQL. Θα εστιάσουμε όμως στα πιο σημαντικά από αυτά. Εδώ είναι ο κωδικός που προσθέτει ένα νέο "ζώο" στον πίνακα των ζώων. Εάν προσπαθήσετε σκληρά, τότε με αυτόν τον τρόπο μπορείτε να συλλέξετε ένα ολόκληρο θηριοτροφείο :)

$con_str=mysql_connect("localhost", "root", "", "db1"); if(mysql_connect("localhost","root"))( echo "Hello!!"; ) mysql_select_db("db1",$con_str); $query_str="INSERT INTO `db1`.`animal` (`id`, `name`) VALUES (NULL, "dog")"; mysql_query ($query_str); mysql_close();

$ con_str = mysql_connect ("localhost" , "root" , "" , "db1" );

if (mysql_connect("localhost" , "root" ) ) (

ηχώ "Γεια σου!!" ;

mysql_select_db("db1" , $ con_str );

$query_str= "INSERT INTO `db1`.`animal` (`id`, "name") ΤΙΜΕΣ (NULL, "dog")";

mysql_query($query_str) ;

mysql_close();

Αυτός ο κώδικας πρέπει να επικολληθεί σε ένα αρχείο PHP και να φιλοξενηθεί στην πλευρά του διακομιστή.

Χρησιμοποιώντας τη συνάρτηση mysql_connect(), συνδέουμε τον διακομιστή βάσης δεδομένων MySQL. Ως ορίσματα, η συνάρτηση λαμβάνει τον κεντρικό υπολογιστή, το όνομα χρήστη DBMS, τον κωδικό πρόσβασης και το όνομα της βάσης δεδομένων προς σύνδεση. Έχουμε έναν κενό κωδικό πρόσβασης επειδή χρησιμοποιούμε έναν διακομιστή εγκατεστημένο στον τοπικό (πελάτη) μηχάνημα.

Για να δείξουμε όλα τα περιγραφόμενα παραδείγματα εγγραφής στη βάση δεδομένων MySQL με χρήση PHP, χρησιμοποιήσαμε το "κύριο κιτ" από το Ντένβερ. Περιλαμβάνει έναν τοπικό διακομιστή Apache, έναν διακομιστή MySQL, phpMyAdmin και μερικά άλλα χρήσιμα εργαλεία κωδικοποίησης και δοκιμών.

Στη συνέχεια, στο λογικό μπλοκ if, ελέγξαμε για σύνδεση με τον διακομιστή της βάσης δεδομένων. Μετά από αυτό, στη συνάρτηση mysql_select_db (), ορίσαμε τη βάση στην οποία θα συνδεθούμε. Χρησιμοποιώντας τη συνάρτηση mysql_query(), ξεκινήσαμε το ερώτημα SQL γραμμένο στη μεταβλητή $query_str. Και στο τέλος, η σύνδεση που δημιουργήθηκε έκλεισε (συνάρτηση mysql_close()). Τώρα, αν κοιτάξουμε στο θηριοτροφείο μας (επιτραπέζιο ζώο), θα βρούμε ένα νέο «κατοικίδιο» εκεί.

Για να το γράψει σε MySQL, η PHP «ευγενικά» παρείχε όλο το απαραίτητο σύνολο συναρτήσεων. Το κύριο πράγμα που «καίγονται» οι αρχάριοι όταν χρησιμοποιούν SQL στον κώδικα προγράμματος είναι η λανθασμένη ορθογραφία των ερωτημάτων, η παραβίαση της σύνταξης και η εναλλαγή χαρακτήρων για διαφυγή (εισαγωγικά).

Για να αποφύγετε την εμφάνιση επιπλέον «γκρίζων» μαλλιών στο κεφάλι σας, είναι καλύτερο να ελέγξετε τη σωστή ορθογραφία του αιτήματος χρησιμοποιώντας το phpMyAdmin. Για να το κάνετε αυτό, τοποθετήστε τον κώδικα SQL στον επεξεργαστή προγράμματος και εκτελέστε τον για εκτέλεση. Εάν κάτι δεν πάει καλά, η εφαρμογή θα αρχίσει να "βρίζει", να εμφανίζει ένα κόκκινο μήνυμα και να υποδεικνύει τη θέση του σφάλματος.

Όπως μπορείτε να δείτε, με τη βοήθεια της MySQL, μπορείτε να «συλλέξετε» το θηριοτροφείο σας και να αλλάξετε σωστά τις λέξεις οποιουδήποτε «τραγουδιού». Και για την εγγραφή στη βάση δεδομένων MySQL, η PHP είναι τέλεια, γι' αυτό σας συμβουλεύουμε να κάνετε μια «στενή» φιλία με αυτήν την «εξαιρετική» γλώσσα προγραμματισμού!

Και δίνονται
. Και τώρα θα μιλήσουμε για το πώς προσθέστε εικόνες στη βάση δεδομένων MySQL μέσω φόρμας χρησιμοποιώντας PHP.

Δημιουργία πεδίου στη βάση δεδομένων MySQL για προσθήκη εικόνας

Αρχικά, θα ήθελα να πω ότι αποθήκευση εικόνων σε μια βάση δεδομένων MySQLείναι απαραίτητο να ορίσουμε ένα από τα πεδία του πίνακα όπως προέρχεται από τον τύπο BLOB.

Η συντομογραφία BLOB σημαίνει Binary Large Object. Ο τύπος αποθήκευσης δεδομένων BLOB έχει πολλές επιλογές:

  • TINYBLOB - Μπορεί να αποθηκεύσει έως και 255 byte
  • Το BLOB μπορεί να αποθηκεύσει έως και 64 kilobyte πληροφοριών
  • MEDIUMBLOB - έως 16 megabyte
  • LONGBLOB έως 4 gigabyte

Για αποθήκευση του αρχείου εικόνας στη βάση δεδομένωνπρέπει να διαβάσετε το αρχείο σε μια μεταβλητή και να δημιουργήσετε ένα ερώτημα για να προσθέσετε δεδομένα στον πίνακα.

Προετοιμασία μιας φόρμας σε μια σελίδα για την προσθήκη μιας εικόνας σε μια βάση δεδομένων MySQL

Στην περίπτωσή μου το καθήκον ήταν προσθέστε δύο εικόνες στη βάση δεδομένων μέσω φόρμας χρησιμοποιώντας PHP. Έχουμε μια φόρμα με δύο πεδία και ένα κουμπί υποβολής:

form name="form1" μέθοδος="post" action="add_image.php"
enctype="multipart/form-data"

Θυμηθείτε ότι η ιδιότητα δράσηκαθορίζει το αρχείο που θα φορτώσει τα αρχεία εικόνας. Χαρακτηριστικό εγτύποςκαθορίζει τον τρόπο κωδικοποίησης του περιεχομένου της φόρμας και πληροφορίες σχετικά με τις μεταφορτώσεις αρχείων. Δείτε πώς να συμπληρώσετε σωστά το χαρακτηριστικό εγτύποςνα αποφύγω .

Σημείωση:Η υποστήριξη για τη μεταφόρτωση πολλαπλών αρχείων εισήχθη στην έκδοση 3.0.10.

Γράψιμο κώδικα PHP για αποθήκευση εικόνας στη βάση δεδομένων MySQL

Επειδή στέλνουμε δύο αρχεία στο χαρακτηριστικό όνομαμετά τη λέξη, υποδεικνύουμε "αρχείο χρήστη" με αγκύλες, με αυτό διευκρινίζουμε ότι στέλνουμε πολλά αρχεία χρησιμοποιώντας έναν πίνακα που περιέχει χαρακτηριστικά αρχείου:

$_FILES['userfile']['name']

Το αρχικό όνομα αρχείου στον υπολογιστή-πελάτη.

$_FILES['userfile']['type']

τύπου mime του αρχείου, εάν το πρόγραμμα περιήγησης παρείχε αυτές τις πληροφορίες.
Παράδειγμα: "image/gif" .

$_FILES['userfile']['size']

$_FILES['userfile']['tmp_name']

Προσωρινό όνομα αρχείου με το οποίο αποθηκεύτηκε το μεταφορτωμένο αρχείο στον διακομιστή.

Πώς να λάβετε τις τιμές κάθε αρχείου;

Για παράδειγμα, ας υποθέσουμε ότι αποστέλλονται αρχεία με όνομα /home/test/1.jpg και /home/test/2.jpg.

Σε αυτήν την περίπτωση $_FILES['userfile']['name']
θα περιέχει την τιμή 1.jpg,
και $_FILES['userfile']['name']
- τιμή 2.jpg

Ομοίως, το $_FILES['userfile']['size'] θα περιέχει την τιμή μεγέθους αρχείου 1.jpg και ούτω καθεξής. Τώρα εξετάστε τον κώδικα του αρχείου add_image.php, ο οποίος καθορίστηκε στο χαρακτηριστικό form δράση.

1024*1024||$image_size==0) ( $ErrorDescription="Κάθε εικόνα δεν πρέπει να υπερβαίνει το 1 Mb! Η εικόνα δεν μπορεί να προστεθεί στη βάση δεδομένων."; return ""; ) // Εάν το αρχείο έχει φτάσει, τότε ελέγξτε εάν το γραφικό // it (για λόγους ασφαλείας) if(substr($_FILES["userfile"]["type"][$num], 0, 5)=="image") ( //Διαβάστε τα περιεχόμενα του αρχείου $image=file_get_contents($_FILES ["userfile"]["tmp_name"][$num]); //Διαφυγή ειδικών χαρακτήρων στο περιεχόμενο του αρχείου $image=mysql_escape_string($image); επιστροφή $image; )else( ErrorDescription=" Δεν ανεβάσατε εικόνα, επομένως δεν μπορεί να προστεθεί."; return ""; ) )else( $ErrorDescription="Δεν ανεβάσατε εικόνα, το πεδίο είναι κενό, επομένως το αρχείο δεν μπορεί να προστεθεί στη βάση δεδομένων. "; return ; ) return $image; ) ?>

Έτσι, σε αυτό το άρθρο, μιλήσαμε για το πώς να αποθηκεύσετε μια εικόνα σε μια βάση δεδομένων MySQL. , χρησιμοποιώντας PHP.

Τελευταία ενημέρωση: 1.11.2015

Για την προσθήκη δεδομένων, χρησιμοποιείται η έκφραση "INSERT":

$query ="INSERT INTO αγαθών VALUES(NULL, " Samsung Galaxy III","Samsumg")";

Η δήλωση "INSERT" εισάγει μία γραμμή στον πίνακα. Μετά λέξη-κλειδίΤο INTO καθορίζει το όνομα του πίνακα και μετά το VALUES το σύνολο τιμών για όλες τις στήλες καθορίζεται σε παρένθεση. Εφόσον έχουμε τρεις στήλες στον πίνακα, καθορίζουμε τρεις τιμές.

Επειδή στο προηγούμενο θέμα, κατά τη δημιουργία ενός πίνακα, καθορίσαμε την ακόλουθη σειρά στηλών: id, όνομα, εταιρεία, σε αυτήν την περίπτωση, το NULL μεταβιβάζεται για τη στήλη id, το "Samsung Galaxy III" για το όνομα και το "Samsumg" για την εταιρεία .

Επειδή η στήλη id ορίζεται ως AUTO_INCREMENT, δεν χρειάζεται να καθορίσουμε μια συγκεκριμένη αριθμητική τιμή για αυτήν και μπορούμε να περάσουμε μια τιμή NULL και η MySQL θα εκχωρήσει την επόμενη διαθέσιμη τιμή στη στήλη.

Τώρα ας δούμε την προσθήκη δεδομένων χρησιμοποιώντας ένα παράδειγμα. Ας δημιουργήσουμε ένα αρχείο δημιουργία.phpμε το ακόλουθο περιεχόμενο:

Προστέθηκαν δεδομένα";) // κλείσιμο σύνδεσης mysqli_close($link); ) ?>

Προσθήκη νέου μοντέλου

Εισαγάγετε μοντέλο:

Κατασκευαστής:

Εδώ, ο κώδικας για την αλληλεπίδραση με τη βάση δεδομένων συνδυάζεται με τη λειτουργικότητα των φορμών: χρησιμοποιώντας τη φόρμα, εισάγουμε δεδομένα που θα προστεθούν στη βάση δεδομένων.

Ασφάλεια και MySQL

Εδώ χρησιμοποιήσαμε τη συνάρτηση mysqli_real_escape_string(). Χρησιμεύει για τη διαφυγή χαρακτήρων σε μια συμβολοσειρά, η οποία στη συνέχεια χρησιμοποιείται σε ένα ερώτημα SQL. Λαμβάνει ως παραμέτρους ένα αντικείμενο σύνδεσης και μια συμβολοσειρά για διαφυγή.

Έτσι, χρησιμοποιούμε πραγματικά το χαρακτήρα διαφυγής δύο φορές: πρώτα για την έκφραση sql χρησιμοποιώντας τη συνάρτηση mysqli_real_escape_string() και μετά για html χρησιμοποιώντας τη συνάρτηση htmlentities(). Αυτό θα μας επιτρέψει να προστατευτούμε από δύο τύπους επιθέσεων ταυτόχρονα: επιθέσεις XSS και ενέσεις SQL.

Τα σχόλια μετακινήθηκαν από το ιστολόγιο

ΣΕΡΓΕΙ
14/09/2016 στις 01:25
Καλό απόγευμα!
Σας ενδιαφέρει αυτή η ερώτηση: ποιος είναι ο ευκολότερος τρόπος οργάνωσης της αποθήκευσης δεδομένων και των ρυθμίσεων προγράμματος χωρίς τη χρήση βάσης δεδομένων; Δεν θέλω να είμαι συνδεδεμένος με MySQL ή Access..

ΔΙΑΧΕΙΡΙΣΤΗΣ
14/09/2016 στις 22:14
Γειά σου!

Ιδιότητες.Ρυθμίσεις
App.Config
αρχείο XML
σειριοποίηση
Δοκιμάστε να επιλέξετε ένα από αυτά από τη λίστα.

ΝΙΚΟΛΑΪ
16/09/2016 στις 02:28
Γεια σας, πώς μπορώ να διαγράψω την επισημασμένη σειρά στο dataGridVIew από το dataGridVIew και το phpMyAdmin.

PhpMyAdmin; Αυτό είναι απλώς ένα κέλυφος για εργασία με τη βάση δεδομένων, μπορείτε να το εξηγήσετε;

ΝΙΚΟΛΑΪ
18/09/2016 στις 02:24
είναι απαραίτητο η επιλεγμένη σειρά να διαγραφεί από το DataGridView και από τη βάση δεδομένων.

ΔΙΑΧΕΙΡΙΣΤΗΣ
19/09/2016 στις 07:00
Πώς να διαγράψετε μια σειρά σε μια βάση δεδομένων δεδομένα mysqlπρόσθεσε ένα άρθρο.

ΝΙΚΟΛΑΪ
20/09/2016 στις 09:20
Ευχαριστώ πολύ.

ΔΗΜΑ
20/09/2016 στις 10:24
Γεια σου, μπορείς με αυτόν τον τρόπονα υλοποιηθεί όχι μέσω DataGridView, αλλά μέσω ComboBox; Αν ναι, πώς; Ευχαριστώ.

ΔΙΑΧΕΙΡΙΣΤΗΣ
22/09/2016 στις 03:21
Χαίρετε. Παράδειγμα:

ΓΕΝΝΑΔΥ
22/09/2016 στις 18:25
γιατί να προσθέσω τέτοιο κείμενο στη βάση δεδομένων System.Windows.Forms.TextBox, Text: ge

Παρεμπιπτόντως, αυτό (ge) στο τέλος γράφεται από το γονίδιο, παρόλο που το κείμενο καθορίζεται στις ρυθμίσεις του πίνακα. Η λέξη του γονιδίου έπρεπε να ταιριάζει περισσότερο, εμφανίζω αυτόν τον πίνακα στο πρόγραμμά μου και βγαίνει ότι μου εμφανίζει όλο αυτό το περιττό κείμενο

ΔΙΑΧΕΙΡΙΣΤΗΣ
24/09/2016 στις 04:17
Πιθανότατα το ερώτημα SQL να είναι γραμμένο λάθος, για παράδειγμα:

Στο textBox1 εισάγουμε το όνομα: Gene.

Ερώτημα Sql: "Εισαγωγή σε τιμές ονόματος πίνακα(textBox1, ..)"; Αποτέλεσμα: System.Windows.Forms.TextBox

Και πρέπει να περάσετε: "Εισαγωγή σε τιμές ονομάτων πίνακα(textBox1.Text, ..)";
Αποτέλεσμα: Gena

ΓΕΝΝΑΔΥ
24/09/2016 στις 18:41
Έτσι είναι. Ευχαριστώ

ΣΕΡΓΕΙ
25/09/2016 στις 11:51
Χαίρετε. Και πώς να εφαρμόσετε την προσθήκη στη βάση δεδομένων μέσω του textBox;

ΔΙΑΧΕΙΡΙΣΤΗΣ
26/09/2016 στις 20:53
Όλα είναι ίδια κατ' αρχήν. Για παράδειγμα, ας πάρουμε το πιο πρόσφατο παράδειγμα, χρειάζεται:

//δημιουργήστε παραμέτρους και προσθέστε τις στη συλλογή cmd.Parameters.AddWithValue("@Name", textBox1.Text); cmd.Parameters.AddWithValue("@LastName", textBox2.Text);

τώρα οι παράμετροι: Name και LastName λαμβάνουν τις τιμές που έχουν εισαχθεί στα πλαίσια κειμένου και τις μεταβιβάζουν στη βάση δεδομένων

ΛΙΝΑΡΑ
27/09/2016 στις 17:45
Γεια σας, πώς είναι η επισημασμένη σειρά στο dataGridVIew και στο phpMyAdmin;

ΔΙΑΧΕΙΡΙΣΤΗΣ
29/09/2016 στις 02:06
Δεν ξέρω πώς μπορείτε να επιλέξετε μια σειρά στο phpMyAdmin. Και στο dataGridView, για παράδειγμα, αυτό μπορεί να γίνει χρησιμοποιώντας το συμβάν SelectionChanged.

PSH
30/09/2016 στις 03:48
2 Λινάρα:
Εάν θέλετε πραγματικά να επεξεργαστείτε σειρές, χρησιμοποιήστε ένα εργαλείο a la HediSQL, τροποποιήστε και τροποποιήστε τις σειρές.

2 admin
Καλή μέρα! Σας ευχαριστώ για τα υλικά - όλα δηλώνονται πολύ ψύχραιμα)
Ερώτηση: Προσθέτω δεδομένα με το ακόλουθο αίτημα (είναι δοκιμαστικό):

String sql = "INSERT INTO users (`FIO`, `Tour`, `Count`, `Cost`, `Date`, `Passport`, `Birth`) ΤΙΜΕΣ ("Kolyan", "Moscow", "1+1" ", 1100, "2011-11-11", "1111 1111", "11/9/1900");";

Τα δεδομένα εισάγονται όλα εντάξει, αλλά στη βάση δεδομένων (mysql) αντί για κυριλλικά βγαίνουν "????".

οπτικό στούντιολέει ότι το System.String είναι μια ακολουθία Unicode.

Δοκίμασε επίσης:

ALTER DATABASE `test` COLLATE "koi8r_general_ci"; ALTER TABLE `users` COLLATE="koi8r_general_ci"; ALTER DATABASE `test` COLLATE "utf8_unicode_ci"; ALTER TABLE `users` COLLATE="utf8_unicode_ci";

Αλλά δεν βοηθάει..
Τι μπορεί να φταίει; Διαφορετικές κωδικοποιήσεις VS και DB; Ή τι?
Θα μπορούσε να στείλει τι να διαβάσει / να αλλάξει.
Ευχαριστώ

ΔΙΑΧΕΙΡΙΣΤΗΣ
01.10.2016 στις 09:49
Χαίρετε.

Στο DB (και στον πίνακα) η ταξινόμηση utf_general_ci

Υπάρχει τέτοια σύγκριση; Ίσως utf8_general_ci;

Συνήθως δημιουργούν μια βάση δεδομένων Mysql επιλέγοντας τη σύγκριση utf8_general_ci, οπότε δεν υπάρχουν προβλήματα με το κυριλλικό αλφάβητο, εκτός εάν, φυσικά, ο διακομιστής δεν λαμβάνει σφάλματα από τον πελάτη.

Το COLLATION χρησιμοποιείται για σύγκριση, αλλά σε αυτήν την περίπτωση, η κωδικοποίηση (σύνολο χαρακτήρων) είναι σημαντική. Επομένως, πρώτα πρέπει να βεβαιωθείτε ότι έχει ρυθμιστεί σωστά στον διακομιστή, για παράδειγμα, στο utf8 και όχι στο latin1.

Κατά τη σύνδεση μέσω της υποδοχής .net (από προεπιλογή), χρησιμοποιείται latin1, επομένως μερικές φορές χρειάζεται να καθορίσετε ρητά την κωδικοποίηση utf8 στη συμβολοσειρά σύνδεσης:

MySqlConnection mycon; mycon = new MySqlConnection("server=127.0.0.1;uid=vasya;pwd=123;database=test;Charset=utf8;"); //MySqlConnectionStringBuilder: mysqlCSB.CharacterSet = "utf8";

PSH
01.10.2016 στις 11:34
Έχεις δίκιο, περιέγραψε τον εαυτό σου, utf8_general_ci!
Ναι βοήθησε, ;Charset=utf8;
Ευχαριστώ πολύ!

ΣΕΡΓΙΟΣ
02.10.2016 στις 11:02
Ευχαριστώ για το παράδειγμα εργασίας. Ερώτηση
Έχω δημιουργήσει ένα πεδίο κειμένου στο οποίο θα ήθελα να εισαγάγω τη διεύθυνση IP της βάσης δεδομένων, αλλά δεν ξέρω πώς να αντικαταστήσω αυτά τα δεδομένα εδώ

String conStr = " [email προστατευμένο];user=test;" +
"database=test;password=test;";
Πείτε μου πώς να εισάγω δεδομένα από πεδία κειμένου σε μορφή windows σε αυτό το σχέδιο….

ΔΙΑΧΕΙΡΙΣΤΗΣ
03.10.2016 στις 11:50
"[email προστατευμένο];χρήστης=...
Γενικά, είναι καλύτερο να χρησιμοποιείτε ιδιότητες αντί για μια τέτοια συμβολοσειρά, όπως σε αυτό το άρθρο, ή τη μέθοδο String.Format()

OLGA2203
15/05/2017 στις 20:14

String Connect = "Server=127.0.0.1;Port=3306;Database=base;Data Source=localhost;user=root;"; MySqlConnection con = νέο MySqlConnection(Connect); con.Open(); //Δημιουργία σύνδεσης με τη βάση δεδομένων. MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = @”INSERT INTO tovar(ID,Category,Name,Trademark,Price,Photo,Size,Color,Material,Count) ΤΙΜΕΣ (@pr, @Category, @Name, @TradeMark, @Price, @Photo, @Size, @Color, @Material, @Count)”; cmd.Parameters.AddWithValue("@pr",counter); cmd.Parameters.AddWithValue(“@Category”, comboBox1.SelectedItem.ToString()); cmd.Parameters.AddWithValue(“@Name”, textBox1.Text); cmd.Parameters.AddWithValue(“@TradeMark”, textBox2.Text); cmd.Parameters.AddWithValue(“@Price”, Convert.ToInt32(textBox4.Text)); cmd.Parameters.AddWithValue(“@Photo”, textBox3.Text); cmd.Parameters.AddWithValue(“@Size”, textBox6.Text); cmd.Parameters.AddWithValue(“@Color”, textBox5.Text); cmd.Parameters.AddWithValue(“@Material”, textBox8.Text); cmd.Parameters.AddWithValue(“@Count”, Convert.ToInt32(textBox7.Text)); cmd.Connection = con; cmd.ExecuteNonQuery(); MessageBox.Show("Προσθήκη επιτυχής", "Προσθήκη επιτυχής", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

Εμφανίζεται το σφάλμα "Η στήλη 'ID' δεν μπορεί να είναι μηδενική", αφαιρώ την προσθήκη στη στήλη ID - το ίδιο γράφεται και για την επόμενη στήλη κ.λπ.
Εάν εισάγω οποιεσδήποτε σταθερές τιμές σε αγκύλες στο VALUES, η γραμμή προστίθεται στη βάση.
Πες μου, σε παρακαλώ, ποιο είναι το πρόβλημα; Πρέπει να γράψω στη βάση δεδομένων ακριβώς τα δεδομένα και τις τιμές που εισάγονται μέσω της φόρμας