Query σε MySQL χρησιμοποιώντας PHP

Σε προηγούμενη ανάρτηση είδαμε πώς να πραγματοποιούμε σύνδεση με μία βάση δεδομένων MySQL μέσω της PHP και πώς να εκτελούμε scripts. Πώς όμως μπορούμε να χρησιμοποιήσουμε τα αποτελέσματα που επιστρέφονται από την εκτέλεση των εντολών;
Έστω ότι έχουμε έναν πίνακα με όνομα Users με τα παρακάτω πεδία:
Users
id
name
surname

Θέλουμε να πάρουμε τις τιμές για όλα τα πεδία όπου id=1. Θεωρούμε πως το πεδίο id είναι το primary key του πίνακα. Θα χρειαστούμε,λοιπόν, τις παρακάτω εντολές:
$sql="SELECT * FROM Users WHERE id='1'";
$result=mysql_query($sql)
if($result){
$row=mysql_fetch_assoc($result);
echo $row["name"]." ".$row["surname"];
}else{
echo mysql_error();
}


Παρατηρήσεις Κώδικα
  • Η μεταβλητή $sql είναι μια τυχαία μεταβλητή στην οποία αποθηκεύουμε την εντολή SQL που θα εκτελέσουμε, σε μορφή string.

  • Στη μεταβλητή $result αποθηκεύουμε το αποτέλεσμα της εντολής mysql_query($sql) η οποία εκτελεί την εντολή SQL. Αν η μεταβλητή $result είναι TRUE, σημαίνει πως η εντολή εκτελέστηκε επιτυχώς. Αν είναι FALSE σημαίνει πως δεν εκτελέστηκε σωστά η εντολή πχ. γιατί ο πίνακας δεν υπάρχει.

  • Αφού ελέγξουμε ότι το $result είναι TRUE, φορτώνουμε στην μεταβλητή $row την εγγραφή-αποτέλεσμα που επιστράφηκε από τη βάση δεδομένων. Έπειτα, γράφοντας $row["name"] εννοούμε το περιεχόμενο του πεδίου "name", ενώ χρησιμοποιώντας το $row["surname"] εννοούμε το περιεχόμενο του πεδίου "surname" (όπως ακριβώς τα έχουμε ορίσει στη βάση δεδομένων).
    Υπάρχουν και άλλες συναρτήσεις όπως η mysql_fetch_array($result) ή mysql_fetch_object($result) οι οποίες επιστρέφουν τα αποτελέσματα του query σε μορφή array ή object, αντίστοιχα.

  • Σε περίπτωση που το $result επιστρέψει FALSE, τότε εκτελείται η mysql_error() η οποία εκτυπώνει στην οθόνη την περιγραφή του λάθους που προκλήθηκε από την εκτέλεση του query.

  • Το όνομα του πίνακα και των πεδίων στο query είναι case-sensitive. Έχει, δηλαδή, διαφορά το Users από το users.

Άλλη συνάρτηση που ίσως θα θέλατε να χρησιμοποιήσετε στα προγράμματά σας, είναι η mysql_num_rows($result). Η συνάρτηση αυτή επιστρέφει το σύνολο των εγγραφών που επεστράφηκαν ως αποτέλεσμα από το query σας. Σε περίπτωση, λοιπόν, που επιστρέψει 0 σημαίνει πως δεν υπάρχουν εγγραφές που να ανταποκρίνονται στο ερώτημά σας. Παρόλα αυτά το $result θα είναι TRUE.
Είναι όμως πολύ πιθανόν να βρεθείτε κάποια στιγμή να πάρετε δεδομένα από παραπάνω από έναν πίνακα. Πχ. να έχετε τους παρακάτω πίνακες:
Users
id
name
surname
και
Pages
id
title
content

Μπορείτε να γράψετε $sql="SELECT * FROM users,pages"; όμως πώς θα ξεχωρίσετε το πεδίο id του πίνακα pages από το πεδίο id του πίνακα users! Για να λύσουμε αυτό το πρόβλημα μπορούμε από τη βάση να αλλάξουμε το όνομα των πεδίων ώστε να έχουμε πχ. id_users και id_pages. Αυτό όμως δεν είναι πάντα λύση. Δεν μπορούμε πάντα να αλλάξουμε τα ονόματα των πινάκων. Πρέπει το πρόβλημα να λυθεί μέσω PHP. Άρα θα χρησιμοποιήσουμε την αναφορά μέσω πίνακα στο κάθε πεδίο. Δηλαδή αντί για id θα γράψουμε pages.id και users.id οπότε και θα έχουμε το query $sql="SELECT users.id,name,surname,pages.id,title,content". Σε περίπτωση όμως που μας φαίνεται πολύ το να γράφουμε κάθε φορά $row["users.id"] μπορούμε να γράψουμε το query ως $sql="SELECT users.id AS u_id,name,surname,pages.id AS p_id,title,content" οπότε και θα αναφερόμαστε στα αμφιλεγόμενα πεδία ως $row["u_id"] και $row["p_id"].

Comments

Popular Posts