PHP MySQLi-funktioner: mysqli_query och mysqli_connect
⚡ Smart sammanfattning
MySQL, PHP och andra databasåtkomstmetoder låter ett PHP-skript ansluta till en databas, köra frågor och läsa resultat. Denna genomgång täcker de viktigaste mysqli-funktionerna, fullständiga CRUD-exempel, förberedda säkerhetssatser och de alternativa PDO- och ODBC-åtkomstmetoderna.
PHP har en omfattande samling inbyggda funktioner för att manipulera MySQL databaser.
PHP mysqli_connect funktion
PHP-funktionen mysqli_connect används för att ansluta till en MySQL databasserver.
Den har följande syntax.
<?php $db_handle = mysqli_connect($db_server_name, $db_user_name, $db_password); ?>
HÄR,
- "$db_handle" är resursvariabeln för databasanslutningen.
- "mysqli_connect(…)" är funktionen för PHP-databasanslutningen
- "$db_server_name" är namnet eller IP-adressen på den server som är värd för MySQL servern.
- "$db_user_name" är ett giltigt användarnamn i MySQL servern.
- "$db_password" är ett giltigt lösenord som är kopplat till ett användarnamn i MySQL servern.
PHP mysqli_select_db funktion
Funktionen mysqli_select_db används för att välja en databas.
Den har följande syntax.
<?php mysqli_select_db($db_handle, $database_name); ?>
HÄR,
- "mysqli_select_db(...)" är databasvalsfunktionen som returnerar antingen sant eller falskt
- "$db_handle" är serverns anslutningslänk
- "$database_name" är namnet på databasen
PHP mysqli_query funktion
Funktionen mysqli_query används för att köra SQL frågor.
Funktionen kan användas för att köra följande frågetyper:
- Insert
- Välja
- Uppdatering
- Radera
Den har följande syntax.
<?php mysqli_query($db_handle, $query); ?>
HÄR,
- "mysqli_query(...)" är funktionen som exekverar SQL-frågorna.
- "$db_handle" är serverns anslutningslänk
- "$query" är SQL-frågan som ska köras
PHP mysqli_num_rows funktion
Funktionen mysqli_num_rows används för att få antalet rader som returneras från en urvalsfråga.
Den har följande syntax.
<?php mysqli_num_rows($result); ?>
HÄR,
- "mysqli_num_rows(...)" är radräkningsfunktionen
- "$result" är resultatuppsättningen mysqli_query
PHP mysqli_fetch_array funktion
Funktionen mysqli_fetch_array används för att hämta radmatriser från en frågeresultatsuppsättning.
Den har följande syntax.
<?php mysqli_fetch_array($result); ?>
HÄR,
- "mysqli_fetch_array(...)" är funktionen för att hämta radarrayer
- "$result" är resultatet som returneras av funktionen mysqli_query.
PHP mysqli_close funktion
Funktionen mysqli_close används för att stänga en öppen databasanslutning.
Den har följande syntax.
<?php mysqli_close($db_handle); ?>
HÄR,
- "mysqli_close(…)" är PHP-funktionen som stänger anslutningen
- "$db_handle" är serverns anslutningsresurs
PHP MySQL CRUD-exempel
Låt oss titta på praktiska exempel som utnyttjar dessa funktioner. Denna handledning förutsätter kunskap om MySQL och SQL; om dessa termer inte är bekanta för dig, se vår MySQL och SQL tutorials.
Vi kommer att skapa en enkel databas som heter my_personal_contacts med endast en tabell. Anslut till MySQL använda ditt favoritåtkomstverktyg som t.ex MySQL Workbench eller phpMyAdmin, skapa en databas med namnet my_personal_contacts och kör sedan skriptet som visas nedan för att skapa tabellen och infoga lite dummydata.
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');
Läser poster från databasen
Vi ska nu skapa ett program som skriver ut posterna från databasen.
<?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 ?>
Att köra ovanstående kod returnerar resultaten som visas i diagrammet nedan.
Lägger in nya rekord
Låt oss nu titta på ett exempel som lägger till en ny post i vår tabell. Koden nedan visar implementeringen.
<?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 ?>
Genom att köra ovanstående kod visas resultatet "Poseidon har lagts till i din kontaktlista". Gå tillbaka till urvalsfrågeexemplet och hämta dina kontakter igen för att se om Poseidon har lagts till i din lista.
Uppdatering av register
Låt oss nu titta på ett exempel som uppdaterar en post i databasen. Låt oss anta att Poseidon har ändrat sitt kontaktnummer och sin e-postadress.
<?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 ?>
Ta bort poster
Låt oss nu titta på ett exempel som tar bort poster från databasen. Låt oss anta att Venus har ett besöksförbud mot oss, och vi måste ta bort hennes kontaktuppgifter från vår databas.
<?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 ?>
Förhindra SQL-injektion med förberedda satser
CRUD-exemplen ovan bygger frågor genom att sammanfoga strängar. När någon del av en fråga kommer från användarinmatning öppnar detta dörren för SQL-injektion. Förberedda satser löser detta genom att skicka frågan och data separat, så att inmatningen aldrig kan ändra frågestrukturen.
<?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); ?>
Här är frågetecknen platshållare, och bind_param binder säkert värdena för namn och e-postadress. Databasen behandlar dem strikt som data, vilket är anledningen till att förberedda satser, tillgängliga i både mysqli och PDO, är det rekommenderade sättet att köra alla frågor som använder användarinmatning.
PHP Data Access Object (PDO)
PDO är en klass som låter oss manipulera olika databasmotorer som t.ex. MySQL, PostgreSQLoch MS SQL Server med samma gränssnitt.
Koden nedan visar databasåtkomstmetoden med PDO-objektet.
Obs: koden nedan förutsätter kunskap om SQL-språket, arrayer, undantagshantering och foreach-loopen.
<?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(); } ?>
HÄR,
- ”try{…}catch{…}” är undantagshanteringsblocket
- "$pdo = new PDO("mysql..." skapar en instans av PDO-objektet och skickar databasdrivrutinen, server- och databasnamn, användar-ID och lösenord."
- "$pdo->setAttribute…" ställer in PDO-felläget för att kasta undantag
- "$pdo->exec('SET NAMES…" ställer in kodningsformatet
PHP ODBC-dataåtkomst
ODBC är en förkortning för Open Database Connectivity. Den har följande grundläggande syntax.
<?php $conn = odbc_connect($dsn, $user_name, $password); ?>
HÄR,
- ”odbc_connect” är den inbyggda funktionen i PHP
- "$dsn" är ODBC-datakällans namn.
- "$user_name" är valfritt och används för ODBC-användarnamnet
- "$password" är valfritt och används för ODBC-lösenordet
Exemplet nedan förutsätter att du använder Windows och har skapat en ODBC-länk till nordvinden Microsoft Access-databas med namnet 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); ?>


