PHP MySQLΣυναρτήσεις i: mysqli_query & mysqli_connect
⚡ Έξυπνη Σύνοψη
MySQL, PHP και άλλες μέθοδοι πρόσβασης σε βάσεις δεδομένων επιτρέπουν σε ένα σενάριο PHP να συνδεθεί σε μια βάση δεδομένων, να εκτελέσει ερωτήματα και να διαβάσει αποτελέσματα. Αυτή η αναλυτική παρουσίαση καλύπτει τις βασικές συναρτήσεις mysqli, πλήρη παραδείγματα CRUD, προετοιμασμένες δηλώσεις για ασφάλεια και τις εναλλακτικές μεθόδους πρόσβασης PDO και ODBC.

Η PHP διαθέτει μια πλούσια συλλογή από ενσωματωμένες συναρτήσεις για τον χειρισμό MySQL βάσεων δεδομένων.
Λειτουργία PHP mysqli_connect
Η συνάρτηση mysqli_connect της PHP χρησιμοποιείται για τη σύνδεση σε ένα MySQL διακομιστή βάσης δεδομένων.
Έχει την εξής σύνταξη.
<?php $db_handle = mysqli_connect($db_server_name, $db_user_name, $db_password); ?>
ΕΔΩ,
- Το "$db_handle" είναι η μεταβλητή πόρων σύνδεσης βάσης δεδομένων.
- Η συνάρτηση “mysqli_connect(…)” είναι η σύνδεση με τη βάση δεδομένων PHP.
- Το "$db_server_name" είναι το όνομα ή η διεύθυνση IP του διακομιστή που φιλοξενεί το MySQL διακομιστή.
- Το "$db_user_name" είναι ένα έγκυρο όνομα χρήστη στο MySQL διακομιστή.
- Το "$db_password" είναι ένας έγκυρος κωδικός πρόσβασης που σχετίζεται με ένα όνομα χρήστη στο MySQL διακομιστή.
Συνάρτηση PHP mysqli_select_db
Η συνάρτηση mysqli_select_db χρησιμοποιείται για την επιλογή μιας βάσης δεδομένων.
Έχει την εξής σύνταξη.
<?php mysqli_select_db($db_handle, $database_name); ?>
ΕΔΩ,
- Το "mysqli_select_db(…)" είναι η συνάρτηση επιλογής βάσης δεδομένων που επιστρέφει είτε true είτε false
- Το "$db_handle" είναι ο σύνδεσμος σύνδεσης διακομιστή
- "$database_name" είναι το όνομα της βάσης δεδομένων
Συνάρτηση PHP mysqli_query
Η συνάρτηση mysqli_query χρησιμοποιείται για την εκτέλεση SQL ερωτήματα.
Η συνάρτηση μπορεί να χρησιμοποιηθεί για την εκτέλεση των ακόλουθων τύπων ερωτημάτων:
- Κύριο θέμα
- Αγορά
- Ενημέρωση
- Διαγραφή
Έχει την εξής σύνταξη.
<?php mysqli_query($db_handle, $query); ?>
ΕΔΩ,
- "mysqli_query(...)" είναι η συνάρτηση που εκτελεί τα ερωτήματα SQL.
- Το "$db_handle" είναι ο σύνδεσμος σύνδεσης διακομιστή
- Το "$query" είναι το ερώτημα SQL που πρέπει να εκτελεστεί
Λειτουργία PHP mysqli_num_rows
Η συνάρτηση mysqli_num_rows χρησιμοποιείται για τη λήψη του αριθμού των γραμμών που επιστρέφονται από ένα επιλεγμένο ερώτημα.
Έχει την εξής σύνταξη.
<?php mysqli_num_rows($result); ?>
ΕΔΩ,
- Το "mysqli_num_rows(…)" είναι η συνάρτηση μέτρησης γραμμών
- Το "$result" είναι το σύνολο αποτελεσμάτων mysqli_query
Συνάρτηση PHP mysqli_fetch_array
Η συνάρτηση mysqli_fetch_array χρησιμοποιείται για την ανάκτηση πινάκων γραμμών από ένα σύνολο αποτελεσμάτων ερωτήματος.
Έχει την εξής σύνταξη.
<?php mysqli_fetch_array($result); ?>
ΕΔΩ,
- Το "mysqli_fetch_array(…)" είναι η συνάρτηση για την ανάκτηση πινάκων σειρών
- Το "$result" είναι το αποτέλεσμα που επιστρέφεται από τη συνάρτηση mysqli_query.
PHP mysqli_close συνάρτηση
Η συνάρτηση mysqli_close χρησιμοποιείται για το κλείσιμο μιας ανοικτής σύνδεσης βάσης δεδομένων.
Έχει την εξής σύνταξη.
<?php mysqli_close($db_handle); ?>
ΕΔΩ,
- Η συνάρτηση “mysqli_close(…)” είναι η PHP που κλείνει τη σύνδεση
- Το "$db_handle" είναι ο πόρος σύνδεσης διακομιστή
PHP MySQL Παραδείγματα CRUD
Ας δούμε πρακτικά παραδείγματα που αξιοποιούν αυτές τις λειτουργίες. Αυτό το σεμινάριο προϋποθέτει γνώση MySQL και SQL. Εάν αυτοί οι όροι δεν σας είναι γνωστοί, ανατρέξτε στο MySQL και σεμινάρια SQL.
Θα δημιουργήσουμε μια απλή βάση δεδομένων με την ονομασία my_personal_contacts με έναν μόνο πίνακα. Συνδεθείτε με MySQL χρησιμοποιώντας το αγαπημένο σας εργαλείο πρόσβασης όπως MySQL Στο Workbench ή στο phpMyAdmin, δημιουργήστε μια βάση δεδομένων με το όνομα my_personal_contacts και, στη συνέχεια, εκτελέστε το παρακάτω σενάριο για να δημιουργήσετε τον πίνακα και να εισαγάγετε ορισμένα εικονικά δεδομένα.
CREATE TABLE IF NOT EXISTS `my_contacts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `full_names` varchar(255) NOT NULL, `gender` varchar(6) NOT NULL, `contact_no` varchar(75) NOT NULL, `email` varchar(255) NOT NULL, `city` varchar(255) NOT NULL, `country` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; INSERT INTO `my_contacts` (`id`, `full_names`, `gender`, `contact_no`, `email`, `city`, `country`) VALUES (1, 'Zeus', 'Male', '111', 'zeus@olympus.mt.co', 'Agos', 'Greece'), (2, 'Anthena', 'Female', '123', 'anthena@olympus.mt.co', 'Athens', 'Greece'), (3, 'Jupiter', 'Male', '783', 'jupiter@planet.pt.co', 'Rome', 'Italy'), (4, 'Venus', 'Female', '987', 'venus@planet.pt.co', 'Mars', 'Italy');
Ανάγνωση εγγραφών από τη βάση δεδομένων
Τώρα θα δημιουργήσουμε ένα πρόγραμμα που θα εκτυπώνει τις εγγραφές από τη βάση δεδομένων.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $sql_stmt = "SELECT * FROM my_contacts"; // SQL select query $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Database access failed: " . mysqli_error($dbh)); $rows = mysqli_num_rows($result); // get number of rows returned if ($rows) { while ($row = mysqli_fetch_array($result)) { echo 'ID: ' . $row['id'] . '<br>'; echo 'Full Names: ' . $row['full_names'] . '<br>'; echo 'Gender: ' . $row['gender'] . '<br>'; echo 'Contact No: ' . $row['contact_no'] . '<br>'; echo 'Email: ' . $row['email'] . '<br>'; echo 'City: ' . $row['city'] . '<br>'; echo 'Country: ' . $row['country'] . '<br><br>'; } } mysqli_close($dbh); // close the database connection ?>
Η εκτέλεση του παραπάνω κώδικα επιστρέφει τα αποτελέσματα που φαίνονται στο παρακάτω διάγραμμα.
Εισαγωγή νέων εγγραφών
Ας δούμε τώρα ένα παράδειγμα που προσθέτει μια νέα εγγραφή στον πίνακά μας. Ο παρακάτω κώδικας δείχνει την υλοποίηση.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $sql_stmt = "INSERT INTO `my_contacts` (`full_names`,`gender`,`contact_no`,`email`,`city`,`country`)"; $sql_stmt .= " VALUES(7,8,9,10,11,12)"; $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Adding record failed: " . mysqli_error($dbh)); echo "Poseidon has been successfully added to your contacts list"; mysqli_close($dbh); // close the database connection ?>
Εκτελώντας τον παραπάνω κώδικα, προκύπτει το μήνυμα "Ο Ποσειδώνας προστέθηκε με επιτυχία στη λίστα επαφών σας". Επιστρέψτε στο παράδειγμα ερωτήματος επιλογής και ανακτήστε ξανά τις επαφές σας για να δείτε αν ο Ποσειδώνας έχει προστεθεί στη λίστα σας.
Ενημέρωση αρχείων
Ας δούμε τώρα ένα παράδειγμα που ενημερώνει μια εγγραφή στη βάση δεδομένων. Ας υποθέσουμε ότι ο Ποσειδώνας έχει αλλάξει τον αριθμό επικοινωνίας και τη διεύθυνση email του.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $sql_stmt = "UPDATE `my_contacts` SET `contact_no` = 8, `email` = 9"; $sql_stmt .= " WHERE `id` = 5"; // SQL update query $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Updating record failed: " . mysqli_error($dbh)); echo "ID number 5 has been successfully updated"; mysqli_close($dbh); // close the database connection ?>
Διαγραφή εγγραφών
Ας δούμε τώρα ένα παράδειγμα που αφαιρεί εγγραφές από τη βάση δεδομένων. Ας υποθέσουμε ότι η Βενούση έχει εκδώσει περιοριστική εντολή εναντίον μας και πρέπει να αφαιρέσουμε τα στοιχεία επικοινωνίας της από τη βάση δεδομένων μας. βάσεις δεδομένων.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $id = 4; // Venus's ID in the database $sql_stmt = "DELETE FROM `my_contacts` WHERE `id` = $id"; // SQL delete query $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Deleting record failed: " . mysqli_error($dbh)); echo "ID number $id has been successfully deleted"; mysqli_close($dbh); // close the database connection ?>
Αποτροπή SQL Injection με Προετοιμασμένες Δηλώσεις
Τα παραπάνω παραδείγματα CRUD δημιουργούν ερωτήματα συνενώνοντας συμβολοσειρές. Όταν οποιοδήποτε μέρος ενός ερωτήματος προέρχεται από είσοδο χρήστη, αυτό ανοίγει την πόρτα για SQL injection. Οι προετοιμασμένες εντολές λύνουν αυτό το πρόβλημα στέλνοντας το ερώτημα και τα δεδομένα ξεχωριστά, επομένως η είσοδος δεν μπορεί ποτέ να αλλάξει τη δομή του ερωτήματος.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); $stmt = mysqli_prepare($dbh, "INSERT INTO my_contacts (full_names, email) VALUES (?, ?)"); mysqli_stmt_bind_param($stmt, "ss", $name, $email); $name = 'Poseidon'; $email = 'poseidon@sea.oc'; mysqli_stmt_execute($stmt); mysqli_stmt_close($stmt); mysqli_close($dbh); ?>
Εδώ τα ερωτηματικά είναι placeholders και η bind_param συνδέει με ασφάλεια τις τιμές name και email. Η βάση δεδομένων τις αντιμετωπίζει αυστηρά ως δεδομένα, γι' αυτό και οι προετοιμασμένες εντολές, διαθέσιμες τόσο σε mysqli όσο και σε PDO, αποτελούν τον συνιστώμενο τρόπο εκτέλεσης οποιουδήποτε ερωτήματος που χρησιμοποιεί είσοδο χρήστη.
Αντικείμενο Πρόσβασης Δεδομένων PHP (PDO)
Η PDO είναι μια κλάση που μας επιτρέπει να χειριζόμαστε διαφορετικές μηχανές βάσεων δεδομένων, όπως π.χ. MySQL, PostgreSQLκαι MS SQL Server χρησιμοποιώντας την ίδια διεπαφή.
Ο παρακάτω κώδικας δείχνει τη μέθοδο πρόσβασης στη βάση δεδομένων χρησιμοποιώντας το αντικείμενο PDO.
Σημείωση: ο παρακάτω κώδικας προϋποθέτει γνώση της γλώσσας SQL, των πινάκων, του χειρισμού εξαιρέσεων και του βρόχου foreach.
<?php try { $pdo = new PDO("mysql:host=localhost;dbname=my_personal_contacts", 'root', 'melody'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec('SET NAMES "utf8"'); $sql_stmt = "SELECT * FROM `my_contacts`"; $result = $pdo->query($sql_stmt); $result->setFetchMode(PDO::FETCH_ASSOC); $data = array(); foreach ($result as $row) { $data[] = $row; } print_r($data); } catch (PDOException $e) { echo $e->getMessage(); } ?>
ΕΔΩ,
- Το "try{…}catch{…}" είναι το μπλοκ χειρισμού εξαιρέσεων
- Η εντολή “$pdo = new PDO(“mysql…”) δημιουργεί μια παρουσία του αντικειμένου PDO και μεταβιβάζει το πρόγραμμα οδήγησης της βάσης δεδομένων, τον διακομιστή και τα ονόματα της βάσης δεδομένων, το αναγνωριστικό χρήστη και τον κωδικό πρόσβασης.
- Το "$pdo->setAttribute..." ορίζει τη λειτουργία σφάλματος PDO ώστε να δημιουργεί εξαιρέσεις
- Το “$pdo->exec('ΟΡΙΣΜΟΣ ΟΝΟΜΑΤΩΝ...” ορίζει τη μορφή κωδικοποίησης
PHP ODBC Πρόσβαση σε Δεδομένα
Το ODBC είναι το ακρωνύμιο για το Open Database Connectivity. Έχει την ακόλουθη βασική σύνταξη.
<?php $conn = odbc_connect($dsn, $user_name, $password); ?>
ΕΔΩ,
- Το “odbc_connect” είναι η ενσωματωμένη συνάρτηση της PHP.
- Το "$dsn" είναι το όνομα της πηγής δεδομένων ODBC.
- Το "$όνομα_χρήστη" είναι προαιρετικό και χρησιμοποιείται για το όνομα χρήστη ODBC.
- Το "$password" είναι προαιρετικό και χρησιμοποιείται για τον κωδικό πρόσβασης ODBC
Το παρακάτω παράδειγμα υποθέτει ότι χρησιμοποιείτε Windows και έχουν δημιουργήσει έναν σύνδεσμο ODBC προς τον βόρειο άνεμο Microsoft Βάση δεδομένων Access με όνομα northwind.
<?php $dbh = odbc_connect('northwind', '', ''); if (!$dbh) { exit("Connection Failed: " . $dbh); } $sql_stmt = "SELECT * FROM customers"; $result = odbc_exec($dbh, $sql_stmt); if (!$result) { exit("Error accessing records"); } while (odbc_fetch_row($result)) { $company_name = odbc_result($result, "CompanyName"); $contact_name = odbc_result($result, "ContactName"); echo "<b>Company Name (Contact Person):</b> $company_name ($contact_name) <br>"; } odbc_close($dbh); ?>

