Skip to content


CodeIgniter 2.2 Sql Server Driver Bug Fix

CodeIgniter ile SQL Server’a bağlanmak istediğinizde gerekli olan bütün ayarları yapmanıza rağmen bağlanıp veri alamıyor olabilirsiniz. Bunun sebebi sürücü dosyasındaki ufak bir bug malesef.

Öncelikle doğru php sürücüsünün tanımlanmış olduğunu, native client’ın yüklü olduğunu kontrol ediniz. Ardından halen bağlanamıyorsanız şu değişikliği yapmayı deneyin:

“C:\wamp\www\[sitenizin klasörü]\system\database\drivers\sqlsrv\sqlsrv_driver.php” dosyasını bir editörde açın. içerisinde;

function db_pconnect()
{
$this->db_connect(TRUE);
}

olan bölümü,

function db_pconnect()
{
return $this->db_connect(TRUE);
}

Şeklinde değiştirin. Benzer şekilde;

 function affected_rows()
{
return @sqlrv_rows_affected($this->conn_id);
}

olan bölümü de,

 function affected_rows()
{
return @sqlsrv_num_rows($this->result_id); // @sqlrv_rows_affected($this->conn_id);
}

şeklinde değiştirin. Ardından, tekrar bağlanmayı deneyebilirsiniz.

Önemli: dosyanızın önceki halini yedeklemeyi unutmayın.

Sorunun çözümünü şurada görmüştüm: http://stackoverflow.com/a/20787337

Posted in Uncategorized.


Wamp Server + Php + SQL Server bağlantısı

Php veritabanı konusunda daha çok mySQL ile birlikte anılmasına rağmen ihtiyaç doğrultusunda Sql Server ile de çalışabilmekte. Bunun için gerekli sürücülerini yüklemek yeterli. Bu yazıda adım adım Sql Server bağlantısı kuracağız.

Öncelikle http://www.microsoft.com/en-us/download/details.aspx?id=20098 adresini takip edip mevcut Php sürümünüze göre php sürücüsünü indirmeniz gerekiyor. Mevcut php sürümünüzü hazırladığınız boş bir php sayfasına yazacağınız “phpinfo()” komutu ile öğrenebilirsiniz.

phpinfo

Burada dikkat edilmesi gereken iki nokta var: php versiyonu ve thread safety. Mevcut php versiyonunuza karşılık gelen uygun sürücüyü indirdikten sonra yapmanız gereken, doğru sürücü dosyalarını bulmak.
driver_files

Zira, açtığınız dosyalar;

<php_sqlsrv_[version]_ts.dll>
<php_sqlsrv_[version]_nts.dll>
<php_pdo_sqlsrv_[version]_ts.dll>
<php_pdo_sqlsrv_[version]_nts.dll>

şeklinde birkaç dosyadan oluşacaktır. seçeceğiniz dosyalar phpinfo dan edindiğiniz thread safety durumu ve php versiyonuna göre değişecektir. Benim elimde thread safety enabled bir php 5.5 mevcut. Bu nedenle “php_pdo_sqlsrv_55_ts.dll” ve “php_sqlsrv_55_ts.dll dosyaları benim ihtiyacım olan sürücü dosyalarıdır.

Bu dosyaları php’nin ext klasörüne kopyalamamız gerekiyor. Wamp server varsayılan ayarlarıyla benim için bu klasör “C:\wamp\bin\php\php5.5.12\ext” altında bulunmakta. Dolayısı ile dosyaları buraya kopyalıyoruz. Sonrasında Php’ye bu sürücüleri tanıtmamız gerekecek.

Sürücü tanıtma işlemi php.ini dosyasında eklediğimiz sürücü dosyalarının adını gerekli yere yazmaktan ibaret. Dikkat edilmesi gereken önemli husus ise, bunu iki kez yapacağımız. Çünkü php.ini dosyası wamp server ile kurulum yaptığınızda “”C:\wamp\bin\php\php5.5.12\” altında ve “C:\wamp\bin\apache\apache2.4.9\bin” altında olmak üzere iki tanedir. Dolayısı ile makinenizdeki apache de bu ini dosyasını kendi kopyasından kullanmakta.
php_driver_definition

Yapmamız gereken değişiklik, “Dynamic Extensions” başlığı altında bu iki dosyayı şu şekilde belirtmekten ibaret:

extension=php_sqlsrv_55_ts.dll
extension=php_pdo_sqlsrv_55_ts.dll

php.ini dosyasında yaptığımız değişiklikten sonra son olarak Sql native client kurulumu yapmamız gerekiyor. Bunun için doğru sürümü bulmanız gerekmekte. Benim durumumda SQL Server 2012 için Sql Native Client 11’i kurmam gerekti. Bunu da şu adresten edinebilirsiniz: “http://www.microsoft.com/en-us/download/details.aspx?id=36434“.

Bütün bunları tamamladığınızda SQL Server’a rahatça bağlanabilirsiniz. Şuradan örnek bağlantı kodları bulabilirsiniz: https://msdn.microsoft.com/en-us/library/cc296182%28v=sql.105%29.aspx

Ben o örnek kod üzerinde daha rahat kullanmanız amacı ile şu şekilde değişiklik yaptım, bağlantı bilgilerini direkt yazabilirsiniz.

 

<?php
/* Specify the server and connection string attributes. */
$serverName = “(local)”;  // makine IP bilgisi ya da hostname

/* Get UID and PWD from application-specific files.  */
$connectionInfo = array( “UID”=>”<db_kullanici_adi>”,
“PWD”=>”<db_kullanici_parola>”,
“Database”=>”<db_adi>”);

/* Connect using SQL Server Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo “Unable to connect.</br>”;
die( print_r( sqlsrv_errors(), true));
}

/* Query SQL Server for the login of the user accessing the
database. */
$tsql = “SELECT top 100 * from users”; // buraya istediginiz bir query yazabilirsiniz.
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false )
{
echo “Error in executing query.</br>”;
die( print_r( sqlsrv_errors(), true));
}

/* Retrieve and display the results of the query. */
//$row = sqlsrv_fetch_array($stmt);
while( $row = $row = sqlsrv_fetch_array($stmt) ) {
echo $row[0].”, “.$row[1].”<br />”;
}
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>

 

Posted in PHP, SQL Server.

Tagged with , , .


Yeni paylaşımlar

Merhabalar.

Uzunca bir süre buralara bakmadığımdan yeni farkettim ki bildiğim hacklenmişiz :) WordPress in yeni sürümüne geçip eski, değiştirilmiş postları sildim. Bundan sonrası için daha sık kontrol ettiğim ve paylaşımlar yayınladığım yazılarla görüşmek üzere.

Posted in Uncategorized.