disket.net Beta
Konu Listesine Dön

PHP 8.2 ile eski bir projeyi çalıştırırken hata: Call to undefined function mysql_connect()

Web Geliştirme Açılış: 09.08.2026 07:09 20 Görüntülenme
Selam dostlar, uzun zamandır bu forumu takip ediyorum ama ilk kez yazıyorum. Bir müşterimden 2005'te yazılmış eski bir PHP projesi devraldım. Proje hâlâ production'da çalışıyor ama sunucu yenilenirken PHP 8.2'ye geçmek zorunda kaldık. Şimdi site açılmıyor, loglarda sürekli 'Call to undefined function mysql_connect()' hatası alıyorum. Biliyorum, mysql_* fonksiyonları PHP 7'de kaldırıldı ama proje çok eski ve kod tabanı devasa. Tüm dosyaları mysqli'ye çevirmek imkânsız gibi, çünkü yüzlerce dosyada mysql_query, mysql_fetch_array gibi çağrılar var. Ayrıca proje eski bir MySQL 4.1 veritabanına bağlanıyor, şimdi sunucuda MySQL 8 var. Acaba bu eski kodu çalıştırmanın pratik bir yolu var mı? Mesela bir uyumluluk katmanı yazmak mantıklı olur mu? Yoksa direkt geçiş mi yapmalıyım? Şimdiden teşekkürler, iyi forumlar.

Cevaplar (2)

Merhaba joyking93, hoş geldin. Bu klasik bir sorun, çoğumuzun başına gelmiştir. Öncelikle şunu söyleyeyim: mysql_* fonksiyonları PHP 7.0'da kaldırıldı, PHP 8'de zaten yok. Ama panik yok, birkaç seçeneğin var.

1) **Uyumluluk katmanı yazmak**: En hızlı çözüm, eski mysql_* fonksiyonlarını mysqli ile birebir taklit eden bir dizi fonksiyon tanımlamak. Örneğin, mysql_connect() yerine mysqli_connect() kullanan bir sarmalayıcı yazabilirsin. Ancak dikkat: mysql_query() geriye sonuç kaynağı döner, mysqli_query() ise mysqli_result nesnesi döner. Bu yüzden mysql_fetch_array() gibi fonksiyonları da sarmalaman gerek. İşte basit bir örnek:

```php
if (!function_exists('mysql_connect')) {
$GLOBALS['mysql_link'] = null;
function mysql_connect($host, $user, $pass) {
$GLOBALS['mysql_link'] = mysqli_connect($host, $user, $pass);
return $GLOBALS['mysql_link'];
}
function mysql_select_db($db, $link = null) {
$link = $link ?: $GLOBALS['mysql_link'];
return mysqli_select_db($link, $db);
}
function mysql_query($query, $link = null) {
$link = $link ?: $GLOBALS['mysql_link'];
return mysqli_query($link, $query);
}
function mysql_fetch_array($result) {
return mysqli_fetch_array($result);
}
function mysql_error($link = null) {
$link = $link ?: $GLOBALS['mysql_link'];
return mysqli_error($link);
}
}
```

Bu şekilde tüm eski fonksiyonları tanımlayabilirsin. Ama unutma, mysql_* fonksiyonlarının tam listesi çok geniş; mysql_num_rows, mysql_fetch_assoc, mysql_insert_id, mysql_real_escape_string vs. hepsini eklemelisin. Ayrıca bu geçici bir çözüm, uzun vadede kodun modernize edilmesi şart.

2) **MySQL 8 uyumu**: MySQL 8'de eski şifreleme yöntemleri (mysql_native_password) hâlâ destekleniyor ama varsayılan değil. Eğer bağlantı sorunu yaşarsan, MySQL 8'de kullanıcıyı oluştururken `IDENTIFIED WITH mysql_native_password BY 'şifre'` şeklinde tanımlaman gerekebilir. Ayrıca eski kodda `mysql_connect` çağrılarına dördüncü parametre olarak bağlantı bayrakları geçiyorsa (örneğin MYSQL_CLIENT_INTERACTIVE), bunları da sarmalaman gerek.

3) **Alternatif: Docker ile eski ortam kurmak**: Eğer sunucuyu değiştirmek zorunda değilsen, en temiz çözüm PHP 5.6 veya 7.0 içeren bir Docker imajı kullanmak. Ama production'da bu pratik olmayabilir.

Bence en mantıklısı, bir uyumluluk katmanı yazıp siteyi ayağa kaldırmak, sonra müşteriye modernizasyon teklifi götürmek. Kolay gelsin.
Tamam kanka, diskdigger84'ün yazdığı uyumluluk katmanı işe yaradı. Tüm mysql_* fonksiyonlarını sarmaladım, hatta mysql_real_escape_string() için de mysqli_real_escape_string()'e yönlendirdim. Ayrıca MySQL 8'de kullanıcıyı mysql_native_password ile oluşturunca bağlantı sorunu da çözüldü. Site şu an sorunsuz çalışıyor. Yine de bu geçici bir çözüm, müşteriye modernizasyon için teklif hazırlıyorum. Verdiğin destek için çok sağ ol, iyi ki bu forum var!

Bu konuya cevap yazabilmek için retro topluluğumuza üye olmalı veya giriş yapmalısınız.

İlgili Konular & Benzer Paylaşımlar

PHP 8'de eski bir MySQL kodunu PDO'ya çevirirken karşılaştığım PDOException hatası Kategori: Web Geliştirme
Pico W ile kendi web sunucumu kurdum ama CSS dosyası bir türlü yüklenmiyor - neyi yanlış yapıyorum? Kategori: Web Geliştirme
PHP 8.3'te mcrypt kütüphanesi olmadan AES-256-CBC şifreleme nasıl yapılır? Kategori: Web Geliştirme