PHP - MySQL Bağlantısı (MySQL Connection)

PHP sayfalarında veritabanı kullanmak için web sunucusu üzerinden MySQL sunucusuna bağlantı kurulur. Eski kaynaklarda geçen mysql_connect(), mysql_query() gibi fonksiyonlar artık kaldırılmıştır. Güncel ve güvenli yöntemler: PDO (önerilir) veya MySQLi.

Önemli (Güncelleme)
mysql_connect(), mysql_select_db(), mysql_query(), mysql_fetch_row() gibi mysql_* fonksiyonları modern PHP sürümlerinde çalışmaz. Bu sayfada aynı işlemler PDO ve MySQLi ile güncellenmiştir.

1) PDO ile MySQL Bağlantısı (Önerilen)

PDO; güvenlik (hazırlanmış sorgular), taşınabilirlik ve hata yönetimi açısından en yaygın modern çözümdür.

Örnek: PDO bağlantı + hata yönetimi
<?php
$host = "localhost";
$db   = "veritabani_adi";
$user = "root";
$pass = "sifre";
$charset = "utf8mb4";

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";

$options = [
  PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
  $pdo = new PDO($dsn, $user, $pass, $options);
  echo "Bağlantı başarılı!";
} catch (PDOException $e) {
  die("Bağlantı hatası: " . $e->getMessage());
}
?>

2) PDO ile Sorgu Çalıştırma (SELECT)

Eski örnekteki SELECT ad, soyad FROM tablo1 sorgusunu PDO ile yapalım.

Örnek: PDO query + foreach
<?php
// $pdo daha önce oluşturulmuş olsun.

$sql = "SELECT ad, soyad FROM tablo1";
$stmt = $pdo->query($sql);

foreach ($stmt as $row) {
  echo $row["ad"] . " " . $row["soyad"] . "<br>";
}
?>
Not
Eski mysql_fetch_row() yerine PDO’da genelde FETCH_ASSOC ile alan adlarıyla erişmek daha okunur olur.

3) Güvenli Sorgu: Prepared Statement

Kullanıcıdan gelen verilerle sorgu yaparken hazırlanmış sorgu kullanmalısın (SQL Injection riskini azaltır).

Örnek: WHERE ile filtreleme (prepared)
<?php
$aranan = "Mehmet"; // örnek

$sql = "SELECT ad, soyad FROM tablo1 WHERE ad = :ad";
$stmt = $pdo->prepare($sql);
$stmt->execute(["ad" => $aranan]);

$rows = $stmt->fetchAll();
foreach ($rows as $row) {
  echo $row["ad"] . " " . $row["soyad"] . "<br>";
}
?>

4) INSERT / UPDATE Örneği

Veri eklemek/güncellemek için yine prepared statement kullanılır.

Örnek: INSERT
<?php
$sql = "INSERT INTO tablo1 (ad, soyad) VALUES (:ad, :soyad)";
$stmt = $pdo->prepare($sql);

$stmt->execute([
  "ad"    => "Ali",
  "soyad" => "Yılmaz"
]);

echo "Kayıt eklendi. ID: " . $pdo->lastInsertId();
?>

Alternatif: MySQLi ile Bağlantı

MySQLi de güncel bir yöntemdir. PDO yerine tercih edilirse aşağıdaki gibi kullanılabilir.

Örnek: MySQLi bağlantı
<?php
$mysqli = new mysqli("localhost", "root", "sifre", "veritabani_adi");

if ($mysqli->connect_error) {
  die("Bağlantı hatası: " . $mysqli->connect_error);
}

$mysqli->set_charset("utf8mb4");
echo "Bağlantı başarılı!";
?>
Hangi yöntemi seçmeli?
Yeni projelerde genelde PDO tercih edilir (farklı DB’lere uyum, daha esnek kullanım). Sadece MySQL odaklı projelerde MySQLi de iyi bir alternatiftir.