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.

  • 🔌 Anslutning: mysqli_connect öppnar en länk till MySQL servern, och mysqli_select_db väljer vilken databas som ska arbetas med.
  • 🗃️ Körande frågor: mysqli_query kör INSERT-, SELECT-, UPDATE- och DELETE-satser mot den valda databasen.
  • 📄 Läsresultat: mysqli_num_rows räknar returnerade rader och mysqli_fetch_array läser varje rad in i en array för utdata.
  • 🔄 SKICK Operationer: Tillsammans skapar, läser, uppdaterar och tar dessa funktioner bort poster, de fyra centrala databasoperationerna.
  • 🛡️ Förberedda uttalanden: Att binda värden med förberedda uttryck stoppar SQL-injektion, till skillnad från att bygga frågor genom att sammanfoga användarinmatning.
  • 🧩 PDO och ODBC: PDO erbjuder ett gränssnitt över många databasmotorer, medan ODBC ansluter till källor som Microsoft Tillgång.
  • 🤖 AI Assist: AI-verktyg kan konvertera äldre mysqli-kod till PDO med förberedda kommandon och felsöka anslutningsfel.

PHP MySQL Databasåtkomst

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.

PHP: MySQL Funktioner

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

Vanliga frågor

mysqli fungerar bara med MySQL och erbjuder både procedur- och objektformat. PDO fungerar med många databaser via ett gränssnitt och stöder namngivna platshållare. Båda stöder förberedda satser; PDO är mer portabelt mellan olika motorer.

Nej. Det ursprungliga mysql_*-tillägget togs bort i PHP 7. Använd mysqli eller PDO istället. Båda underhålls aktivt, stöder förberedda satser och skyddar mot injektionsriskerna i det gamla tillägget.

Identifiera felet och visa användaren ett generiskt meddelande medan du loggar informationen privat. Använd inte eko av mysqli_error-utdata till besökare, eftersom det kan avslöja tabellnamn och struktur som är användbara för en angripare.

Ja. Klistra in mysqli-skriptet så kan AI skriva om det med PDO, ersätta sammanfogade frågor med bundna parametrar och lägga till try-catch-felhantering. RevVisa platshållarna och testa varje fråga efteråt.

Ja. Dela felet och din anslutningskod, så kan AI upptäcka felaktiga inloggningsuppgifter, en dålig värd eller port, en saknad databas eller en inaktiverad drivrutin och sedan föreslå de korrigerade inställningarna att prova.

Sammanfatta detta inlägg med: