Deprecated: mysql_connect() Hatası Üzerine

PHP’ye yeni başlayanlar, öğrenmek için çaba harcayanlar muhtemelen bu hatayla karşılaşacaklardır. Kafa karıştırmadan hatanın çözümünü söyleyelim…

Hata tam olarak şöyle:

 Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /dosya/yolu/bilmemne.php on line 1

Bu hatayı alıyorsanız, çok eski ve artık desteklenmeyen bir yöntem kullanıyorsunuz demektir. Hatanın türkçesi:

Kullanımı önerilmiyor: mysql_connect(): msyql uzantısının kullanımı önerilmiyor ve yakın gelecekte bu fonksiyon kaldırılacak. mysqli veya PDO kullanın

Peki neden artık bu fonksiyon desteklenmiyor? Çünkü, bu fonksiyon kullanışlı ve yönetilebilir bir fonksiyon değil. Bunun yerine mysqli ve PDO kullanmak gerekiyor.

mysqli nedir?

Bu da tıpkı mysql fonksiyonları gibi bir fonksiyondur ve PHP’nin mysql fonksiyonlarına alternatifidir, eğer illa ki fonksiyonlarla veri çekeceğim diyorsanız bunu kullanın ama bana kalırsa PDO kullanmanızı öneririm.

PDO nedir?

PDO, PHP’nin bir uzantısıdır. PHP Data Objeleri diye anlayabiliriz. Neden öneriyorum, çünkü bu yöntem daha bir nesne yönelimli ve öğrenince daha da kolayınıza gelecektir. Yakın zamanda PDO hakkında bir şeyler yazmak istiyorum, bakalım.

Sonuç olarak, artık bu fonksiyonu kullanmamanızı öneriyorum.

PHP ile PDO Sorgu Hatalarını Yakalamak

PHP PDO uzantısını kullanırken, try/catch blokları içerisinde veritabanı bağlantısında oluşabilecek hataları şu şekilde yakalayabiliyoruz.

try {
  $pdo = new \PDO($dsn, $user, $pass);
} catch (\PDOException $e) {
  throw new \Exception('Bağlantı hatası: ' . $e->getMessage());
}

Fakat sorgulardaki hataları bu şekilde yakalayamıyoruz maalesef. Sorgu hatalarını yakalamak için, PDO bağlantısının hemen altına aşağıdaki gibi bir metodla tanımlama yapmamız gerekiyor:

$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

Bunu yaptıktan sonra, aşağıdaki gibi sorgu hatalarını yakalayabiliyoruz:

try {
  $query = $pdo->prepare('SELECT * FROM post');
  $query->execute();
  $posts = $query->fetchAll();
} catch (\PDOException $e) {
  throw new \Exception('Sorgu hatası: ' . $e->getMessage());
}

gibi. Kolay gelsin.

Composer/OpenSSL Sertifika Hatası

Mac üzerine Composer kurdum. Paket kurmak istediğimde şöyle bir sertifika hatası veriyordu:

error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Biraz araştırma yaptım. Sorun OpenSSL sertifikasından kaynaklanıyormuş. PHP’nin sürüm güncellemesinden sonra orataya çıkmış. Olmayan ingilizcemle ancak bu kadarını (doğru ya da yanlış) anlayabildim. Çözüm için epey uğraştım.

Evvela php.ini’den OpenSSL eklentisinin/uzantısının akif olup olmadığını kontrol ettim, aktifti. Sonra uzantının kullandığı sertifika dosyasını bulmam gerekti. Bunu da openssl_get_cert_locations() fonksiyonu ile elde ettim.
echo "<pre>"; print_r(openssl_get_cert_locations());

yazdıktan sonra

Array
(
    [default_cert_file] => /Applications/XAMPP/xamppfiles/share/openssl/cert.pem
    [default_cert_file_env] => SSL_CERT_FILE
    [default_cert_dir] => /Applications/XAMPP/xamppfiles/share/openssl/certs
    [default_cert_dir_env] => SSL_CERT_DIR
    [default_private_dir] => /Applications/XAMPP/xamppfiles/share/openssl/private
    [default_default_cert_area] => /Applications/XAMPP/xamppfiles/share/openssl
    [ini_cafile] => 
    [ini_capath] => 
)

Sonucunu aldım. Yani sertifikanın /Applications/XAMPP/xamppfiles/share/openssl/cert.pem yolunda olması gerekiyordu. Ama yerinde yoktu. Olması gereken dizine sertifika dosyasını yüklemem gerekiyordu. Sırasıyla aşağıdaki komutları uyguladım:

cd /Applications/XAMPP/xamppfiles/share/openssl/
sudo curl http://curl.haxx.se/ca/cacert.pem -o cert.pem

Sonrasında Apache sunucusunu yeniden başlattım. Sonra da composer install komutuyla istediğim paketleri kurdum.

Mac’te wget olmadığı için alternatif olarak curl kullandım. Wget sistemde kurulu değilse curl http://site.com/dosya-adi -o yeni-dosya-adi şeklinde kullanılabiliyor.

Kolay gelsin.

CentOS’da Composer Yükleme Hatası

Laravel kurulumu yapmak için CentOS’a Composer kurmam gerekiyordu. Composer kurulumu için komutu yazdığımda “The suhosin.executor.include.whitelist setting is incorrect.” gibi bir hata verdi.

Çözüm için php.ini dosyasına bir satır ekledim. Sırayla nasıl yaptığımı anlatayım.

Nano ile php.ini dosyasını açtım:

nano /etc/php.ini

Açtığım dosyanın en altındaki “; END;” satırından öncesine aşağıdaki kodu yazdım:

suhosin.executor.include.whitelist = phar

CTRL + X deyip belgeyi kapattım ve kaydettim. Daha sonra Apache’yi de yeniden başlatırsak tamam olacak:

sbin/service httpd restart

Sonrasında Composer’ı kurabiliriz:

curl  -k -sS https://getcomposer.org/installer | php

Kolay gelsin.