PHP MySQLi Fonksiyonları: mysqli_query ve mysqli_connect

⚡ Akıllı Özet

MySQLPHP ve diğer veritabanı erişim yöntemleri, bir PHP betiğinin veritabanına bağlanmasına, sorgular çalıştırmasına ve sonuçları okumasına olanak tanır. Bu kılavuz, temel mysqli işlevlerini, eksiksiz CRUD örneklerini, güvenlik için hazırlanmış ifadeleri ve alternatif PDO ve ODBC erişim yöntemlerini kapsamaktadır.

  • 🔌 Bağlanıyor: mysqli_connect, şu adrese bir bağlantı açar: MySQL Sunucu çalıştırılır ve mysqli_select_db, çalışılacak veritabanını seçer.
  • 🗃️ Çalıştırılan Sorgular: mysqli_query, seçilen veritabanına karşı INSERT, SELECT, UPDATE ve DELETE sorgularını yürütür.
  • 📄 Okuma Sonuçları: `mysqli_num_rows` döndürülen satır sayısını sayar ve `mysqli_fetch_array` her satırı çıktı için bir diziye okur.
  • 🔄 REZİL Operadurumlar: Bu işlevler bir araya geldiğinde, kayıt oluşturma, okuma, güncelleme ve silme olmak üzere dört temel veritabanı işlemini gerçekleştirirler.
  • 🛡️ Hazırlanmış Açıklamalar: Hazırlanmış ifadelerle değerleri bağlamak, kullanıcı girdilerini birleştirerek sorgu oluşturmanın aksine, SQL enjeksiyonunu engeller.
  • 🧩 PDO ve ODBC: PDO, birçok veritabanı motorunda tek bir arayüz sunarken, ODBC ise aşağıdakiler gibi kaynaklara bağlanır: Microsoft Erişim.
  • 🤖 Yapay Zeka Yardımı: Yapay zeka araçları, eski mysqli kodunu hazırlanmış ifadeler içeren PDO'ya dönüştürebilir ve bağlantı hatalarını ayıklayabilir.

PHP MySQL Veritabanı Erişimi

PHP, veri manipülasyonu için zengin bir yerleşik fonksiyon koleksiyonuna sahiptir. MySQL veritabanları.

PHP mysqli_connect işlevi

PHP'deki `mysqli_connect` fonksiyonu, bir veritabanına bağlanmak için kullanılır. MySQL veritabanı sunucusu.

Söz dizimi şu şekildedir.

<?php
$db_handle = mysqli_connect($db_server_name, $db_user_name, $db_password);
?>

İŞTE,

  • “$db_handle” veritabanı bağlantısı kaynak değişkenidir.
  • “mysqli_connect(…)” PHP veritabanı bağlantısı için kullanılan fonksiyondur.
  • “$db_server_name”, veritabanını barındıran sunucunun adı veya IP adresidir. MySQL sunucusu.
  • “$db_user_name” geçerli bir kullanıcı adıdır. MySQL sunucusu.
  • “$db_password”, veritabanındaki bir kullanıcı adıyla ilişkilendirilmiş geçerli bir paroladır. MySQL sunucusu.

PHP mysqli_select_db işlevi

mysqli_select_db işlevi bir veritabanı seçmek için kullanılır.

Söz dizimi şu şekildedir.

<?php
mysqli_select_db($db_handle, $database_name);
?>

İŞTE,

  • “mysqli_select_db(…)” doğru veya yanlış değerini döndüren veritabanı seçim fonksiyonudur
  • “$db_handle” sunucu bağlantı linkidir.
  • “$database_name” veritabanının adıdır

PHP mysqli_query işlevi

Mysqli_query işlevi yürütmek için kullanılır SQL sorguları.

Bu fonksiyon aşağıdaki sorgu türlerini çalıştırmak için kullanılabilir:

  • Ekle
  • Seç
  • Güncelle
  • Sil

Söz dizimi şu şekildedir.

<?php
mysqli_query($db_handle, $query);
?>

İŞTE,

  • “mysqli_query(…)” SQL sorgularını yürüten fonksiyondur.
  • “$db_handle” sunucu bağlantı linkidir.
  • “$query” yürütülecek SQL sorgusudur

PHP mysqli_num_rows işlevi

mysqli_num_rows işlevi, bir seçme sorgusundan döndürülen satır sayısını almak için kullanılır.

Söz dizimi şu şekildedir.

<?php
mysqli_num_rows($result);
?>

İŞTE,

  • “mysqli_num_rows(…)” satır sayma fonksiyonudur
  • “$result” mysqli_query sonuç kümesidir

PHP mysqli_fetch_array işlevi

`mysqli_fetch_array` fonksiyonu, sorgu sonuç kümesinden satır dizilerini getirmek için kullanılır.

Söz dizimi şu şekildedir.

<?php
mysqli_fetch_array($result);
?>

İŞTE,

  • “mysqli_fetch_array(…)” satır dizilerini getirmeye yarayan fonksiyondur
  • “$result” mysqli_query işlevi tarafından döndürülen sonuçtur.

PHP mysqli_close işlevi

Mysqli_close işlevi açık bir veritabanı bağlantısını kapatmak için kullanılır.

Söz dizimi şu şekildedir.

<?php
mysqli_close($db_handle);
?>

İŞTE,

  • “mysqli_close(…)”, bağlantıyı kapatan PHP fonksiyonudur.
  • “$db_handle”, sunucu bağlantı kaynağıdır.

PHP MySQL CRUD Örnekleri

Bu işlevlerden yararlanan pratik örneklere bakalım. Bu eğitim, aşağıdaki konularda bilgi sahibi olduğunuzu varsaymaktadır: MySQL ve SQL; bu terimler size yabancı geliyorsa, lütfen kılavuzumuza bakın. MySQL ve SQL eğitimleri.

my_personal_contacts adında, yalnızca tek bir tablo içeren basit bir veritabanı oluşturacağız. Bağlan MySQL gibi favori erişim aracınızı kullanarak MySQL Workbench veya phpMyAdmin kullanarak my_personal_contacts adında bir veritabanı oluşturun, ardından tabloyu oluşturmak ve bazı örnek veriler eklemek için aşağıdaki komut dosyasını çalıştırın.

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

Veritabanından kayıtları okuma

Şimdi veritabanındaki kayıtları yazdıran bir program oluşturacağız.

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

Yukarıdaki kodun çalıştırılması, aşağıdaki diyagramda gösterilen sonuçları verir.

PHP: MySQL fonksiyonlar

Yeni kayıtlar ekleme

Şimdi tablomuza yeni bir kayıt ekleyen bir örneğe bakalım. Aşağıdaki kod, uygulamanın nasıl yapıldığını göstermektedir.

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

Yukarıdaki kodu çalıştırdığınızda "Poseidon kişi listenize başarıyla eklendi" çıktısı alınır. Poseidon'un listenize eklenip eklenmediğini görmek için select sorgusu örneğine geri dönün ve kişilerinizi tekrar alın.

Kayıtları güncelleme

Şimdi veritabanındaki bir kaydı güncelleyen bir örneğe bakalım. Poseidon'un iletişim numarasını ve e-posta adresini değiştirdiğini varsayalım.

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

Kayıtları silme

Şimdi veritabanından kayıtları silen bir örneğe bakalım. Diyelim ki Venüs'ün bize karşı bir uzaklaştırma kararı var ve onun iletişim bilgilerini veritabanımızdan silmemiz gerekiyor. veritabanı.

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

Hazırlanmış Deyimlerle SQL Enjeksiyonunu Önleme

Yukarıdaki CRUD örnekleri, dizeleri birleştirerek sorgular oluşturur. Bir sorgunun herhangi bir kısmı kullanıcı girdisinden geldiğinde, bu SQL enjeksiyonuna kapı açar. Hazırlanmış ifadeler, sorguyu ve veriyi ayrı ayrı göndererek bu sorunu çözer, böylece girdi asla sorgu yapısını değiştiremez.

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

Buradaki soru işaretleri yer tutucudur ve `bind_param`, ad ve e-posta değerlerini güvenli bir şekilde bağlar. Veritabanı bunları kesinlikle veri olarak ele alır; bu nedenle, hem mysqli hem de PDO'da bulunan hazırlanmış ifadeler, kullanıcı girdisi kullanan herhangi bir sorguyu çalıştırmak için önerilen yöntemdir.

PHP Veri Erişim Nesnesi (PDO)

PDO, farklı veritabanı motorlarını manipüle etmemizi sağlayan bir sınıftır. MySQL, PostgreSQLve aynı arayüzü kullanan MS SQL Server.

Aşağıdaki kod, PDO nesnesini kullanan veritabanı erişim yöntemini gösterir.

Not: Aşağıdaki kod, SQL dilini, dizileri, istisna işlemeyi ve foreach döngüsünü bildiğinizi varsaymaktadır.

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

İŞTE,

  • “try{…}catch{…}” istisna işleme bloğudur.
  • “$pdo = new PDO(“mysql…” ifadesi, PDO nesnesinin bir örneğini oluşturur ve veritabanı sürücüsünü, sunucu ve veritabanı adlarını, kullanıcı kimliğini ve parolasını iletir.
  • “$pdo->setAttribute…” komutu, PDO hata modunu istisna fırlatacak şekilde ayarlar.
  • “$pdo->exec('SET NAMES…” kodlama biçimini ayarlar

PHP ODBC Veri Erişimi

ODBC, Açık Veritabanı Bağlantısı'nın kısaltmasıdır. Temel sözdizimi aşağıdaki gibidir.

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

İŞTE,

  • “odbc_connect”, PHP'nin yerleşik bir fonksiyonudur.
  • “$dsn” ODBC veri kaynağı adıdır.
  • “$user_name” isteğe bağlıdır ve ODBC kullanıcı adı için kullanılır.
  • “$password” isteğe bağlıdır ve ODBC şifresi için kullanılır.

Aşağıdaki örnek, aşağıdaki yöntemi kullandığınızı varsaymaktadır. Windows ve Northwind'e bir ODBC bağlantısı oluşturdum. Microsoft Northwind adlı Access veritabanı.

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

SSS

mysqli yalnızca şunlarla çalışır: MySQL Hem prosedürel hem de nesne tabanlı stiller sunar. PDO, tek bir arayüz üzerinden birçok veritabanıyla çalışır ve adlandırılmış yer tutucuları destekler. Her ikisi de hazırlanmış ifadeleri destekler; PDO, farklı motorlar arasında daha taşınabilirdir.

Hayır. Orijinal mysql_* uzantısı PHP 7'de kaldırıldı. Bunun yerine mysqli veya PDO kullanın. Her ikisi de aktif olarak sürdürülmekte, hazırlanmış ifadeleri desteklemekte ve eski uzantının enjeksiyon risklerine karşı koruma sağlamaktadır.

Hatayı yakalayın ve kullanıcıya genel bir mesaj gösterirken ayrıntıları özel olarak kaydedin. mysqli_error çıktısını ziyaretçilere yansıtmayın, çünkü bu, bir saldırgan için faydalı olabilecek tablo adlarını ve yapısını ortaya çıkarabilir.

Evet. mysqli betiğini yapıştırın, yapay zeka bunu PDO kullanarak yeniden yazabilir, birleştirilmiş sorguları bağlı parametrelerle değiştirebilir ve try-catch hata yönetimi ekleyebilir. RevYer tutucuları inceleyin ve ardından her sorguyu test edin.

Evet. Hatayı ve bağlantı kodunuzu paylaşın, yapay zeka yanlış kimlik bilgilerini, hatalı bir sunucuyu veya bağlantı noktasını, eksik bir veritabanını veya devre dışı bırakılmış bir sürücüyü tespit edebilir ve ardından denenecek düzeltilmiş ayarları önerebilir.

Bu yazıyı şu şekilde özetleyin: