ΜΑΘΗΜΑ 9 MYSQL & PHP
Σε αυτό το θέμα θα δούμε μια πολλή βασική λειτουργία της PHP, η δυνατότητα σύνδεσης της με την MySQL μια ανοικτού κώδικα βάση δεδομένων η οποία είναι ενσωματωμένη και με το XAMPP αλλά και τα πλείστα hosting sites, στο panel τους (Cpanel κτλ) έχουν αυτή το πρόγραμμα για βάση δεδομένων. Είναι η πλέον διαδεδομένη βάση δεδομένων και το όνομα της PHP έχει ταυτιστεί με την MySQL.
Γενικά για την MySQL.
Η MySQL είναι από τα πιο διαδεδομένα σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων, και σήμερα μετρά περισσότερα από 12 εκατομμύρια εγκαταστάσεις (πλην των localhost) το όνομα της "My" το πίρε από το όνομα της κόρη του Φιλανδού Μόντυ Βιντένιους, Co-Founder της MySQL AB.
Η MySQL AB είναι μια εταιρία η οποία χρηματοδοτεί την MySQL και σήμερα ανήκει στην Oracle.
Στην MySQL αυτά που θα μας απασχολήσουν προς το παρών είναι τα:
Queries: Είναι κάποιες "ερωτήσεις" που κάνουμε στην MySQL για ένα συγκεκριμένο πίνακα για να μας επιστρέψει πίσω αποτελέσματα. Σε αυτές τις ερωτήσεις δεν καθορίζουμε το πως να βρει τα αποτελέσματα αλλά δίνουμε στην γλώσσα κάποια στοιχεία για να μας βρει τα αποτελέσματα. Για παράδειγμα δίνουμε στην γλώσσα το στοιχείο Male έτσι ώστε να μας δώσει τα αποτελέσματα μόνο για τα Males. Αυτό το είδος προγραμματισμού ονομάζεται Declarative Programming και είναι η 4η γενιά προγραμματισμού.
Inseration: Θα μάθουμε πως να εισάγουμε νέα στοιχεία σε ένα πίνακα αποκλειστικά μέσα από την PHP και αυτό θα γίνει και πάλη μέσω ενός Query.
Selection: Θα μάθουμε να βρίσκουμε κάποια στοιχεία από ένα πίνακα αποκλειστικά και πάλη μέσα από την PHP.
Ταξινόμηση: Θα μάθουμε να ταξινομούμε τα αποτελέσματα μας.
Ενημέρωση: Θα μάθουμε να ενημερώνουμε ένα row δηλαδή να κάνουμε Edit κάποια στοιχεία.
Διαγραφή: Θα μάθουμε να διαγράφουμε στοιχεία από έναν πίνακα.
Δημιουργία Βάσης δεδομένων:
Όταν αναφερόμαστε σε μια βάση δεδομένων, έχουμε ένα όνομα το οποίο αντιπροσωπεύει το όνομα του project μας. Μέσα σε αυτό μπορούμε να φτιάξουμε πολλά tables τα οποία θα αναλαμβάνουν να κρατάνε συγκεκριμένες πληροφορίες. Για παράδειγμα σε ένα project με το όνομα ubuntu-gr μπορούμε να έχουμε ένα table users και ακόμα ένα για τα posts.
Αρχικά ανοίγουμε την διεύθυνση του phpMyAdmin απλά γράφοντας στο URL μας το:
- Κώδικας: Επιλογή όλων
http://localhost/phpmyadmin/
Στην συνέχεια πατάμε στο πάνω πάνελ το κουμπί Databases και φτιάχνουμε μια καινούργια με το όνομα Ubuntu-gr όπως φαίνεται στην πιο κάτω εικόνα:
Όπως βλέπουμε στην πιο κάτω η βάση δεδομένων μας έχει φτιαχτεί με επιτυχία και μπορούμε να το δούμε στο αριστερό πάνελ. Πατάμε πάνω στο λινκ με το όνομα της βάσης δεδομένων: ubuntu-gr
Δημιουργία Table/s - Πίνακα/ες
Στο παράδειγμα μας φτιάχνουμε έναν πίνακα και τον ονομάζουμε users. Για να τον δημιουργήσουμε πρέπει να πατήσουμε πάνω στο λινκ με το όνομα της βάσης δεδομένων όπως είπαμε στην πιο πάνω φωτογραφία.
Στην συνέχεια θα δούμε 2 πεδία τα οποία θα μας βοηθήσουν για να φτιάξουμε τον πινακα μας. Το ένα θα θέλει το όνομα του πινάκα και το άλλο πόσες στήλες/πεδία θέλουμε να έχει ο πίνακας μας. Στο παράδειγμα μας φτιάχνουμε ένα πίνακα με το όνομα Users και με 3 πεδία (ID, Username, Password).
Συμπληρώνουμε τώρα τα πεδία μας όπως φαίνεται πιο κάτω:
Το αποτέλεσμα είναι να έχουμε έναν κενό πίνακα:
PHP & MySQL μαζί:
Την όλη διαδικασία που κάναμε θα μπορούσαμε να την κάναμε και μέσα από ένα query μέσα από την PHP, προς το παρών δεν μας ενδιαφέρει αυτό αφού για τα απλά, το γραφικό περιβάλλον είναι πιο εύκολο. Τώρα όμως θα δούμε πως μπορούμε να πάρουμε, να εισάγουμε, να ανανεώσουμε και να διαγράψουμε στοιχεία στην βάση δεδομένων μας με την χρήση της δυναμικής γλώσσας PHP.
Για να πετύχουμε αυτό, πρέπει να συνδέσουμε την βάση δεδομένων που φτιάξαμε με το πρόγραμμα μας. Αυτό γίνεται πολλή απλά με την χρήση 2-3 εντολών οι οποίες είναι σταθερές. Αν το project που γράφουμε θα έχει πολλά αρχεία τα οποία θα χρειάζονται σύνδεση με την MySQL καλό θα ήταν να φτιάχναμε ένα αρχείο το οποίο θα περιέχει τις εντολές για σύνδεση στην MySQL και απλά με μια απλή εντολή την include θα κάνουμε include αυτό το αρχείο στα άλλα αρχεία.
Inseration - Προσθήκη νέων στοιχειών
Δημιουργούμε το αρχείο connection.php και γράφουμε τον πιο κάτω κώδικα:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
<?php
mysql_connect("localhost", "root", "") or die(mysql_error()) ;
mysql_select_db("ubuntu-gr") or die(mysql_error()) ;
?>
Όπως βλέπουμε πιο πάνω φτιάξαμε την σύνδεση και αν δοκιμάσουμε να τρέξουμε το πρόγραμμα και δεν πάρουμε κάποιο error τότε η mySQL είναι έτοιμη και ακούει της εντολές μας.
Πιο κάτω έχουμε το αρχείο add.html το οποίο είναι η φόρμα όπου ο χρήστης δίνει τα στοιχεία του.
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
<html>
<body>
<form action="add.php" method="POST">
<input type="text" name="username">
<input type="password" name="pass">
<input type="submit" value="Add!">
</form>
</body>
</html>
Φτιάχνουμε κάποιο αρχείο με το όνομα add.php: Σε αυτό το αρχείο θα διαβάζουμε το όνομα και τον κωδικό ενός user και θα το καταχωρούμε στον πίνακα users.
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
<?php
include 'connection.php';
$username = $_POST['username'];
$password = $_POST['pass'];
$query = "INSERT INTO tblUsers (username, password) VALUES ('$username', '$password')";
$result = mysql_query($query);
?>
Τρέξτε σε localhost το add.html και δοκιμάστε, στην συνέχεια μέσα από το phpMyAdmin μπείτε στον πίνακα και δείτε τα στοιχεία που βάλατε.
Πιο πάνω είδαμε πολλή εύκολα πως γίνεται το Inseration, είναι εύκολο και η λογική λέει, λέμε στην MySQL INSERT δηλαδή καταχώρησε INTO tblUsers στον πίνακα tblUsers (username, password) στα πεδία username και password VALUES τις ακόλουθες τιμές: $username, $password. Είναι συμαντικό εδώ να αναφέρουμε ότι πρέπει να μπουν τα εισαγωγικά ανάμεσα στο $username και το $password.
Επιλογή/Εύρεση/Αναζήτηση - Selection
Σε αυτή τη φάση προσπαθούμε με ένα query να βρούμε κάποια αποτελέσματα. Θα πρέπει να γνωρίζουμε από 0 έως και δεκάδες στοιχεία. Θα μπορούσαμε για παράδειγμα να ψάχναμε για όλα τα αποτελέσματα χωρίς περιορισμό, ή να θέλαμε μόνο ένα συγκεκριμένο username κτλ. Η λογική είναι η ίδια.
Φτιάχνουμε ένα με το όνομα: search.html
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
<html>
<body>
<form action="search.php" method="get">
<input type="text" name="search_username">
<input type="submit" value="Search">
</form>
</body>
</html>
Στην συνέχεια φτιάχνουμε ένα άλλο αρχείο με το όνομα search.php:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
<?php
include 'connection.php';
$username = $_GET['search_username'];
$query = "SELECT * FROM tblUsers";
$result = mysql_query($query);
while($row = mysql_fetch_array($result))
{
echo $row['username'] . " " . $row['password'];
echo '<br>';
}
echo "<br><br><br>";
$query = "SELECT username, password FROM tblUsers WHERE username = '$username'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result))
{
echo $row['username'] . " " . $row['password'];
echo '<br>';
}
?>
Βεβαιωθείτε ότι έχετε τουλάχιστον 2-3 στοιχεία στον πίνακα σας με διαφορετικά usernames και τρέξτε το πρόγραμμα. Πιο κάτω βλέπουμε στην σύνταξη του query μας:
- Κώδικας: Επιλογή όλων
SELECT column_name(s) FROM table_name
Όπως είδαμε πιο πάνω αν θέλουμε να απομονώσουμε συγκεκριμένο αποτέλεσμα χρησιμοποιούμε το WHERE. Βασικά λέμε στην MySQL να επιλέξει όλα τα πεδία του πίνακα (* = όλα τα πεδία δηλαδή id, username, password) αν θέλουμε μόνο κάποια και όχι όλα τότε του τα λέμε δηλαδή SELECT username, password..... ο περιορισμός έρχεται μετά το WHERE όπου του λέμε βρες ένα ή περισσότερα αποτελέσματα τα οποία βρίσκονται στον πίνακα tblUsers και το username του ισούται με το $username δηλαδή κάποιο/γενικό username που έχει η συγκεκριμένη μεταβλητή την συγκεκριμένη στιγμή.
Είδαμε ότι πιο πάνω έχουμε το While loop και αυτό είναι λογικό γιατί στον πίνακα μας έχουμε περισσότερα από ένα στοιχεία και θέλουμε να τα εμφανίσουμε όλα και όχι μόνο το πρώτο.
- Κώδικας: Επιλογή όλων
$row = mysql_fetch_array($result)
Με την πιο πάνω εντολή λέμε στην PHP να φτιάξει ένα Loop με επαναλήψεις όσες είναι τα στοιχεία του πίνακα, δηλαδή αν έχουμε 6 στοιχεία θα κάνει 6 επαναλήψεις αν έχει 1000 θα κάνει 1000.
- Κώδικας: Επιλογή όλων
echo $row['username'] . " " . $row['password'];
Πιο πάνω τυπώνουμε όπως θα καταλάβουμε τα στοιχεία σε κάθε επανάληψη μέσα στα εισαγωγικά απλά γράφουμε το όνομα του πεδίου που θέλουμε να τυπώσουμε για την συγκεκριμένη επανάληψη.
Ταξινόμηση
Μπορούμε να ταξινομήσουμε τα αποτελέσματα ενός query έτσι ώστε όταν κάνουμε loop μέσα για να τυπώσουμε τα αποτελέσματα να είναι ταξινομημένα. Αυτό είναι αρκετά χρήσιμο σε ημερομηνίες και ώρες όπως είναι το Bloging, ή top 20 στα voting για παράδειγμα.
Η σύνταξη του query είναι η πιο κάτω:
Αύξουσα
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC
Φθίνουσα
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
SELECT column_name(s) FROM table_name ORDER BY column_name(s) DESC
Στο πιο πάνω παράδειγμα την μόνη ταξινόμηση που μπορούμε να κάνουμε είναι στο ID και να την κάνουμε φθίνουσα για να πάρουμε πρώτο το τελευταίο και να τον τυπώσουμε πρώτο, κάτι σαν LIFO (Last In First Out). Ο κώδικας για το αρχείο order.php
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
<?php
include 'connection.php';
$query = "SELECT * FROM tblUsers ORDER BY id DESC";
$result = mysql_query($query);
while($row = mysql_fetch_array($result))
{
echo $row['username'] . " " . $row['password'];
echo '<br>';
}
?>
Στο πιο πάνω query λέμε στην MySQL να επιλέξει όλα τα στοιχεία χωρίς περιορισμό, και να τα ταξινόμηση σε φθίνουσα σειρά βάση του ID.
Ενημέρωση
Με αυτή τη μέθοδο μπορούμε να ενημερώσουμε ένα υπάρχων στοιχείο του πίνακα με νέα στοιχεία χωρίς να χρειαστεί να φτιάξουμε νέο και να διαγράψουμε το προηγούμενο.
Η σύνταξη του UPDATE είναι:
- Κώδικας: Επιλογή όλων
UPDATE table_name SET column1=value WHERE column=value
Φτιάχνουμε το αρχείο update.php και γράφουμε το εξής:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
<?php
include 'connection.php';
$username = "m.jackson";
$query = "UPDATE tblUsers SET username = 'jackson' WHERE username = '$username'";
$result = mysql_query($query);
?>
Το πιο πάνω πρόγραμμα είναι πολλή ειδικό και δεν είναι γενικό, αν θέλουμε να το κάνουμε γενικό τότε θα φτιάξουμε ένα HTML αρχείο με φόρμα και input data για να τα στείλουμε στο πρόγραμμα μας. Όπως είδαμε πιο πάνω λέμε στην MySQL να θέσει στο πεδίο username την τιμή jackson ή $value όπου το username = $old_username. Σημαντικό αν δεν θέσουμε το WHERE τότε όλα τα rows θα πάρουν την συγκεκριμένη τιμή.
Delete - Διαγραφή στοιχείων
Με αυτή τη μέθοδο ΔΙΑΓΡΑΦΟΥΜΕ από τον πίνακα μας μια εγγραφή. Η όλη διαδικασία γίνεται πάλι από query και είναι εξαιρετικά εύκολο όπως και με τα προηγούμενα. Η σύνταξη του είναι:
- Κώδικας: Επιλογή όλων
DELETE FROM table_name WHERE column = value
Και βλέπουμε εδώ ένα παράδειγμα. Έχουμε ένα αρχείο delete.php όπου διαγράφουμε ένα στοιχείο που το ID του είναι το 1.
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
<?php
include 'connection.php';
$username = "m.jackson";
$query = "DELETE FROM tblUsers WHERE id = 1";
$result = mysql_query($query);
?>
Πολλή απλά λέμε ένα στοιχείο από τον πίνακα θα μπορούσαμε να λέγαμε στην MySQL να διέγραφε ένα row με βάση το username του, λογικό είναι εδώ, αν θέσουμε ενα πολλή γενικό στοιχείο όπως είναι η ημερομηνία μπορεί να χάσουμε μεγάλη ποσότητα από δεδομένα, όταν ένα πεδίο είναι μοναδικό τότε η διαγραφή αναφέρεται σε μόνο ένα στοιχείο, όπως είναι το id σε εμάς αφου είναι auto_increment.
Είδαμε κάποια βασικά πράγματα για την MySQL και την δυνατότητα της να συνδέεται με την PHP. Είμαστε σε θέση και με βάση τα προηγούμενα μαθήματα να φτιάξουμε δυναμικές ιστοσελίδες. Χρειάζεται χρόνο και εξάσκηση για να μπορέσουμε να φτιάξουμε μεγάλα πράγματα. Θα πρέπει να κάνετε λάθη, να ψάχνεται την απάντηση για να μπορείτε να πείτε πως έχω καλές γνώσεις σε αυτό το θέμα. Οι δυνατότητες που προσφέρει η MySQL είναι πολλές πρέπει να πειραματιστούμε μαζί τους για να τα μάθουμε.