PHP MySQLΣυναρτήσεις i: mysqli_query & mysqli_connect

⚡ Έξυπνη Σύνοψη

MySQL, PHP και άλλες μέθοδοι πρόσβασης σε βάσεις δεδομένων επιτρέπουν σε ένα σενάριο PHP να συνδεθεί σε μια βάση δεδομένων, να εκτελέσει ερωτήματα και να διαβάσει αποτελέσματα. Αυτή η αναλυτική παρουσίαση καλύπτει τις βασικές συναρτήσεις mysqli, πλήρη παραδείγματα CRUD, προετοιμασμένες δηλώσεις για ασφάλεια και τις εναλλακτικές μεθόδους πρόσβασης PDO και ODBC.

  • 🔌 Συνδετικός: Η εντολή mysqli_connect ανοίγει έναν σύνδεσμο προς το MySQL διακομιστή και η mysqli_select_db επιλέγει τη βάση δεδομένων με την οποία θα εργαστεί.
  • 🗃️ Εκτελούμενα ερωτήματα: Η εντολή mysqli_query εκτελεί τις εντολές INSERT, SELECT, UPDATE και DELETE στην επιλεγμένη βάση δεδομένων.
  • 📄 Αποτελέσματα Ανάγνωσης: Η συνάρτηση mysqli_num_rows μετράει τις επιστρεφόμενες γραμμές και η συνάρτηση mysqli_fetch_array διαβάζει κάθε γραμμή σε έναν πίνακα για έξοδο.
  • 🔄 ΘΕΡΜΟΣ Operations: Συνδυασμένες, αυτές οι συναρτήσεις δημιουργούν, διαβάζουν, ενημερώνουν και διαγράφουν εγγραφές, τις τέσσερις βασικές λειτουργίες της βάσης δεδομένων.
  • ️ Προετοιμασμένες δηλώσεις: Η σύνδεση τιμών με προετοιμασμένες εντολές σταματά την εισαγωγή SQL, σε αντίθεση με τη δημιουργία ερωτημάτων με τη συνένωση των εισροών χρήστη.
  • 🧩 PDO και ODBC: Το PDO προσφέρει μία διεπαφή σε πολλές μηχανές βάσεων δεδομένων, ενώ το ODBC συνδέεται με πηγές όπως Microsoft Πρόσβαση.
  • 🤖 AI Assist: Τα εργαλεία τεχνητής νοημοσύνης μπορούν να μετατρέψουν παλαιότερο κώδικα mysqli σε PDO με προετοιμασμένες εντολές και να εντοπίσουν σφάλματα σύνδεσης.

PHP MySQL Πρόσβαση σε βάση δεδομένων

Η 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: MySQL Συναρτήσεις

Εισαγωγή νέων εγγραφών

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

<?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);
?>

Συχνές Ερωτήσεις

Το mysqli λειτουργεί μόνο με MySQL και προσφέρει τόσο διαδικαστικά όσο και αντικειμενικά στυλ. Το PDO λειτουργεί με πολλές βάσεις δεδομένων μέσω μίας διεπαφής και υποστηρίζει επώνυμα placeholders. Και τα δύο υποστηρίζουν προετοιμασμένες εντολές. Το PDO είναι πιο φορητό σε όλες τις μηχανές.

Όχι. Η αρχική επέκταση mysql_* αφαιρέθηκε στην PHP 7. Χρησιμοποιήστε αντ' αυτού mysqli ή PDO. Και οι δύο συντηρούνται ενεργά, υποστηρίζουν προετοιμασμένες εντολές και προστατεύουν από τους κινδύνους έγχυσης της παλιάς επέκτασης.

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

Ναι. Επικολλήστε το σενάριο mysqli και η Τεχνητή Νοημοσύνη μπορεί να το ξαναγράψει χρησιμοποιώντας PDO, να αντικαταστήσει τα συνενωμένα ερωτήματα με δεσμευμένες παραμέτρους και να προσθέσει χειρισμό σφαλμάτων try-catch. RevΕλέγξτε τα placeholders και δοκιμάστε κάθε ερώτημα στη συνέχεια.

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

Συνοψίστε αυτήν την ανάρτηση με: