Yazmış olduğum masaüstü programlarımı lisanslama işlemi için online lisanslama yöntemini kullanıyorum. Daha önce kullandığım online lisanslama sistemi biraz eskimeye başlamıştı ve kısıtlı özelliklere sahipti. Programlarımda kullandığım lisanslama sistemini yenilemeye karar verdim. Lisanslama sisteminin online ayağında veritabanı işlemleri için daha önce saf PDO kullanırken bu projede arada EzSql kullanmaya karar verdim.
PDO ile Türkçe karakter sorunu yaşamamak için:
$db->exec("set names utf8");
şeklinde bir kullanım yeterli oluyordu. EzSql tüm veritabanı işlemlerini yönettiği için bu şekilde kullanımın işe yarayacağını pek düşünmüyordum ama denemekten zarar gelmez diyerek aynı kodu kullandım. Sonuç beklediğimden farklı değildi ve fatal error ile karşılaştım :)
Sağolsun Google bu zamana kadar beni pek yolda bırakmamıştır ama bu defa nedense bir çözüm bulamadım. EzSql GitHub hesabına hızlıca bir göz attım ve Change Log kısmında da bu duruma dair bir not ile karşılaşmadım. İşin kolaycılık kısmından sonuç elde edemeyince derinlere inmek zorunda kaldım :)
EzSql PDO Class için iki dosya kullanılıyor. ez_sql_core.php ve ez_sql_pdo.php isimli dosyaları projenize include ediyorsunuz. İlk önce core dosyasının içine baktım ancak connection string ile ilgili bir yer göremedim. Bu arada ben 2.17 versiyonu ile çalışıyorum. Hangi versiyon ile çalıştığınızı öğrenmek için ez_sql_core.php dosyasını inceleyebilirsiniz. define('EZSQL_VERSION','2.17'); şeklinde belirtilen satırdan versiyon numaranızı takip edebilirsiniz. Core dosyada bağlantı cümlesini göremeyince diğer dosyaya geçtim. ez_sql_pdo.php dosyasını inceleyince 44. satırda connect isimli fonksiyonu buldum:
function connect($dsn='', $user='', $password='', $ssl=array()) { global $ezsql_pdo_str; $return_val = false; // Must have a dsn and user if ( ! $dsn || ! $user ) { $this->register_error($ezsql_pdo_str[1].' in '.__FILE__.' on line '.__LINE__); $this->show_errors ? trigger_error($ezsql_pdo_str[1],E_USER_WARNING) : null; } // Establish PDO connection try { if(!empty($ssl)) { $this->dbh = new PDO($dsn, $user, $password, $ssl); } else { $this->dbh = new PDO($dsn, $user, $password); } $return_val = true; } catch (PDOException $e) { $this->register_error($e->getMessage()); $this->show_errors ? trigger_error($e->getMessage(),E_USER_WARNING) : null; } return $return_val; }
60 ve 64 satırlardan sonra aşağıdaki kodu eklediğim zaman EzSql PDO Türkçe karakter sorununu çözmüş oldum:
$this->dbh->exec('SET CHARSET UTF8');
Kodunuza ekleme yaptıktan sonraki görünümü aşağıdaki gibi olmalıdır: