PHP MySQLФункции: 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 чете всеки ред в масив за изход.
  • 🔄 СУРОВ Operaции: В комбинация, тези функции създават, четат, актуализират и изтриват записи - четирите основни операции в базата данни.
  • ️ Подготвени отчети: Обвързването на стойности с подготвени оператори спира 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
?>

Изпълнението на горния код извежда „Poseidon has been successfully added to your contact list“ (Посейдон е успешно добавен към вашия списък с контакти). Върнете се към примера за заявка за избор и извлечете отново контактите си, за да видите дали Посейдон е добавен към вашия списък.

Актуализиране на записи

Нека сега разгледаме пример, който актуализира запис в базата данни. Да предположим, че Посейдон е променил своя телефонен номер и имейл адрес.

<?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 инжектиране с подготвени оператори

Примерите за CRUD по-горе изграждат заявки чрез конкатениране на низове. Когато някоя част от заявка идва от потребителски вход, това отваря вратата за SQL инжектиране. Подготвените оператори решават това, като изпращат заявката и данните отделно, така че входните данни никога не могат да променят структурата на заявката.

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

Тук въпросителните знаци са заместители, а bind_param безопасно свързва стойностите на името и имейла. Базата данни ги третира строго като данни, поради което подготвените оператори, достъпни както в 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('SET NAMES…' задава формата на кодиране

PHP ODBC достъп до данни

ODBC е акронимът за Open Database Connectivity (Отворена свързаност към база данни). Той има следния основен синтаксис.

<?php
$conn = odbc_connect($dsn, $user_name, $password);
?>

ТУК,

  • „odbc_connect“ е вградената функция на PHP
  • “$dsn” е името на източника на ODBC данни.
  • „$user_name“ е незадължително и се използва за потребителското име на ODBC
  • „$password“ е по избор и се използва за ODBC парола.

Примерът по-долу предполага, че използвате Windows и създадоха ODBC връзка към northwind 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 работи с много бази данни чрез един интерфейс и поддържа именувани заместители. И двата поддържат подготвени оператори; PDO е по-преносим между различните двигатели.

Не. Оригиналното разширение mysql_* беше премахнато в PHP 7. Използвайте mysqli или PDO вместо това. И двете се поддържат активно, поддържат подготвени оператори и предпазват от рисковете от инжектиране на старото разширение.

Открийте грешката и покажете на потребителя общо съобщение, докато регистрирате подробностите поверително. Не извеждайте изхода mysqli_error на посетителите, тъй като това може да разкрие имена на таблици и структура, полезни за атакуващия.

Да. Поставете mysqli скрипта и изкуственият интелект може да го пренапише, използвайки PDO, да замени конкатенираните заявки с обвързани параметри и да добави обработка на грешки try-catch. Revпрегледайте заместителите и тествайте всяка заявка след това.

Да. Споделете грешката и кода за връзка и изкуственият интелект може да забележи грешни идентификационни данни, лош хост или порт, липсваща база данни или деактивиран драйвер, след което да предложи коригираните настройки, които да опитате.

Обобщете тази публикация с: