PHP 5.6.0 released

Veritabanı Sorunları

Bu bölümde PHP ile veritabanları arasındaki ilişkiye yönelik sıkça sorulan sorulara yer verilmiştir. Evet, PHP, günümüzde kullanılabilen her veritabanına sanal olarak erişebilmektedir.

PHP'den Microsoft SQL Sunucusuna erişimin mümkün olduğunu duydum. Nasıl?

Windows makinelerde dahili ODBC desteğini, doğru ODBC sürücüsüyle kullanabilirsiniz.

Unix makinelerde, protokol uyumluluğu (en azından oldukça uyumlu) sayesinde Microsoft SQL Sunucusuna erişmek için Sybase-CT sürücüsünü kullanabilirsiniz. Sybase, » Linux sistemler için gerekli kütüphanelerin özgür sürümlerine sahiptir. Diğer Unix işletim sistemlerinin kullanıcılarının doğru kütüphaneleri temin etmek için Sybase'e başvurmaları gerekmektedir. Ayrıca, sonraki soruya da bakınız.

Microsoft Access veritabanlarına erişebilir miyim?

Evet. Tamamen Windows 9x/Me, veya NT/2000 üzerindeyseniz zaten gerekli bütün araçlara sahipsinizdir; ODBC ve Microsoft'un ODBC sürücülerini Microsoft Access veritabanları için kullanabilirsiniz.

Bir Unix üzerindeyseniz ve bir Windows makinedeki bir Microsoft Access veritabanına erişmek istiyorsanız Unix ODBC sürücüleri kullanmanız gerekir. » OpenLink Software, bunu yapabilen Unix temelli ODBC sürücülerine sahiptir.

Diğer bir seçenek, Windows ODBC sürücülerine sahip bir SQL sunucusu kullanmaktır. Böylece Microsoft Access (ODBC kullanarak) ve PHP'ye (yerleşik sürücüleri kullanarak) erişebilirsiniz. Başka bir seçenek ise, Microsoft Access ve PHP'nin her ikisinin de anlayabileceği düz dosyalar veya dBase veritabanları gibi bir aracı dosya biçimlerini kullanmaktır. Bu noktada OpenLink yazılımdan Tim Hayes'in yazdıklarını okuyalım:

Veritabanınıza PHP'den ODBC'yle (yani, OpenLink'in sürücüleriyle) doğrudan erişmek varken aracı dosya olarak başka bir veritabanını kullanmak hiç iyi bir fikir değildir. Mutlaka bir aracı dosya kullanmanız gerekmiyorsa, OpenLink'in NT, Linux ve diğer Unix platformları için dağıttığı Virtuoso'yu (sanal veritabanı motoru) kullanabilirsiniz. Yazılımı özgürce indirmek için » OpenLink'i ziyaret ediniz.

Başarısı kanıtlanmış tek seçenek Windows üzerinde MySQL ile MyODBC sürücülerini kullanmak ve veritabanlarını eşzamanlamaktır. Steve Lawrence şunları yazmıştır:

  • MySQL'i platformunuza talimatlara uygun olarak kurun. En son sürümü » http://www.mysql.com/ adresinden edinebilirsiniz. Bir veritabanı oluşturmak dışında özel bir yapılandırma gerekli değildir. Kullanıcı hesabını yapılandırdıktan sonra host alanına bir % imi veya MySQL ile erişmek istediğiniz Windows makinenizin konak adını yazın. Sunucu ismini, kullanıcı ismi ve parolanızı bir kenara yazmayı unutmayın.
  • Windows için MyODBC sürücüsünü MySQL sitesinden indirin ve Windows makinenize kurun. İşlemi bu programla gelen araçlarla deneyebilirsiniz.
  • Denetim Masası'ndan (veya Yönetimsel Araçlar'dan) ODBC Yöneticisini açıp bir kullanıcı veya bir sistem dsn oluşturun. MySQL veritabanını 1. adımda oluştururken kullandığınız dsn adını, konak adını, kullanıcı adı ve parolasını yazın.
  • Install Access'i tam kurulum seçeneği ile kurun. Bu, doğru eklentilerin kurulduğundan emin olmanızı sağlar; en azından ODBC desteğine ve ilintili tablo yöneticisine ihtiyacınız olacak.
  • En eğlenceli kısma geldik! Yeni bir Access veritabanı oluşturun. Tablo penceresine sağ tıklayıp Link Tables seçeneğini veya dosya menüsü seçeneği altından Get External Data ve ardından Link Tables seçeneğini seçin. Dosya tarayıcı penceresi geldiğinde ODBC türündeki dosyaları seçin. Sistem dsn'sini ve 3. adımda oluşturduğunuz kendi dsn isminizi seçin. İlintilenecek tabloyu seçtikten sonra Tamam'a tıklayın. Hepsi bu kadar! Artık, MySQL sunucunuzdan tabloyu açabilir ve veri ekleme, silme ve düzenleme işlemlerini yapabilirsiniz. Ayrıca sorgular oluşturabilir, MySQL'le tablo ithalatı ve ihracatı yapabilir, formlar ve raporlar, vs. oluşturabilirsiniz.

İpuçları:

  • Tablolarınızı Access'te oluşturabilir, bunları MySQL'e ihraç edebilir ve onları gerisin geriye ilintileyebilirsiniz. Bu işlem, tablo oluşturmayı hızlandırır.
  • Tablolarınızı Access'te oluştururken, yazma erişimine sahip olmak için bir birincil anahtar oluşturmalısınız. Tabloyu ilintilemeden önce MySQL'de de bir birincil anahtar oluşturmayı unutmayın.
  • MySQL'deki bir tabloda değişiklik yaparsanız, Access'teki ile yeniden ilintilemelisiniz. Araçlar>eklenti>ilintili tablo yöneticisi'ne gidin, ODBC DSN'nize geçin ve tabloyu seçip yeniden ilintileyin. İsterseniz, dsn kaynağınızı oradan taşıyabilirsiniz, yapacağınız tek şey Tamam'a tıklamadan önce yeni konum için daima istek yap onay kutusunu işaretlemek olacaktır.

PHP 5 artık MySQL istemci kütüphaneleri ile gelmiyor. Bunun anlamı nedir? MySQL'i hala PHP ile kullanabilecek miyim? MySQL kullanmayı denediğimde "function undefined" (tanımsız işlev) hataları alıyorum. Bu hataları neden veriyor?

PHP'de MySQL desteği şu veya bu şekilde daima olacaktır. PHP 5'te farklı olan tek şey, istemci kütüphanesinin PHP ile birlikte dağıtılmamasıdır. Bunun çeşitli sebepleri var:

  • Bu günlerde çoğu sistemde istemci kütüphanesi zaten kurulu geliyor.

  • Yukarıda bahsedildiği gibi, bir kütüphanenin bir çok sürümüne sahip olmak bazı karışıklıklara sebep olabilir. Örneğin, mod_auth_mysql'i PHP sizinkinden farklı bir sürümle ilintileyebilir; Apache içinde ikisinin birden etkin olması kaçınılmaz olarak bir çökme ile sonuçlanır. Ayrıca, PHP ile dağıtılan istemcinin sürümü sunucu ile tam uyumlu olmayabilir. Bunun en belirgin belirtisi Unix soket dosyası mysql.socket üzerinde bir anlaşmazlık oluşmasıdır.

  • Bakım işleri gevşetilmişti ve yazılım zaman içinde mevcut sürümün gerisine düşmüştü.

  • Kütüphanenin gelecek sürümleri GPL altında olacaktır. Bir GPL'li kütüphaneyi bir BSD/Apache tarzı lisanslı bir proje ile birlikte paketleyemezdik. Bunu bir noktada durdurmak için PHP 5 iyi bir seçimdi.

Bu aslında pek çok kişiyi etkilemeyecektir. Unix kullanıcıları, en azından ne yapacaklarını bilen kişilerdir. PHP'yi derlerken, sistemde kurulu libmysqlclient kütüphanesini --with-mysql=/usr yapılandırma seçeneği ile belirtmeleri yeterli olacaktır. Windows kullanıcıları php.ini içinde php_mysql.dll eklentisini etkin kılabilirler. Kurulum talimatları hakkında daha ayrıntılı bilgi için MySQL Başvuru Kılavuzuna bakınız. Ayrıca, libmysql.dll dosyası da sistem PATH'ından erişilebilir olmalıdır. Daha ayrıntılı bilgi için Windows sistem PATH'ının ayarlanması ile ilgili SSS'yi okuyun. libmysql.dll (ve PHP ile ilgili diğer dosyalar) PHP dizininde bulunduğundan, bu dizinin sistem PATH'ına eklenmesi gerekebilir.

Paylaşımlı MySQL desteğini kurduktan sonra, Apache, libphp4.so yüklendiği anda core dosyası dökümlüyor. Bu düzeltilebilir mi?

MySQL kütüphanelerini pthreads ile ilintilerseniz bu durum ortaya çıkar. ldd ile bunun olup olmadığına bakın. Böyle bir durum varsa, MySQL kaynak paketini veya kaynak RPM'sini indirip pthreads ile ilintileme seçeneğini derleme seçeneklerinden çıkarıp, paketi yeniden derlemelisiniz. Bu işlem sorunu çözecektir. Bundan sonra PHP'yi yeni MySQL kütüphanesini kullanacak şekilde yeniden derlemeniz gerekecektir.

Neden şöyle bir hata alıyorum?: "Warning: 0 is not a MySQL result index in <file> on line <x>" veya "Warning: Supplied argument is not a valid MySQL result resource in <file> on line <x>"?

0 değerli bir sonuç belirtecini kullanmaya çalışıyorsunuzdur. Buradaki sıfır, sorgunuzun bir şekilde başarısız olduğu anlamına gelir. Dönen sonuç belirtecini kullanmaya çalışmadan önce, sorguyu gönderdikten sonra oluşan hataları incelemeniz gerekir. Bunun gerektiği gibi yapıldığı bir kod şöyle olurdu:

<?php

$result 
mysql_query("SELECT * FROM tables_priv");
if (!
$result) {
    echo 
mysql_error();
    exit;
}
?>
veya
<?php

$result 
mysql_query("SELECT * FROM tables_priv")
    or die(
"Kötü sorgu: " mysql_error());
?>

add a note add a note

User Contributed Notes 5 notes

up
3
knb at gfz-potsdam dot de
9 years ago
This is a crucial piece of information for SYBASE users:

If you are using the free, but old, 11.x client libs from sybase,
then compile with option  "--with-sybase-ct=$SYBASE"
substitute $SYBASE with the appropriate directory name.

option --with-sybase (without ct) can somehow be used to talk to old MS-SQL servers, but only with the 11.x client libs.

If you are using free, or have legally obtained, 12.x client libs from sybase, then compile with option  "--with-sybase-ct=$SYBASE/$SYBASE_OCS"
substitute $SYBASE/$SYBASE_OCS with the appropriate directory name.
up
0
plandis98 at yahoo dot com
8 years ago
If one is using PHP on Windows to connection to MS SQL Server and does not want to pass credentials via the mssql_connect but instead use MS Connectionless NT Authentication, what is the proper syntax/usage? 

I believe you want to turn on secure_connection in php.ini file:
; Use NT authentication when connecting to the server
mssql.secure_connection = On
up
0
djlopez at gmx dot de
8 years ago
How to compile PHP5 when you have installed mysql, but
- you can't find the "mysql header files" or
- get this error: Cannot find MySQL header files under /usr/

If you want to use mysql 4.0 (*not* 4.1 or even higher!) just download & extract the latest mysql4.0 binary distribution to e.g.
/root/mysql40/

but don't start it (it even should not work, if you have a mysql server already running)

Then use --with-mysql=/root/mysql4 within your php5 configuration.

After compiling/installing (make, make install), you may delete the /root/mysql40/ directory, or keep it for later versions of php5.
up
-1
Anonymous
9 years ago
Just a quick note which may help Windows users setting up PHP/Apache/MySQL.  I was receiving these two error messages on Apache startup: 1) "The procedure entry point mysql_thread_end could not be located in the dynamic link library LIBMYSQL.dll" and 2) "PHP Startup: Unable to load dynamic library '<my php installation dir>/ext/php_mysql.dll' - The specified procedure could not be found".  After checking that libmysql.dll did exist in my root PHP install dir, and that this dir was in my path, I determined that the problem was an older version of libmysql.dll.  My solution was to search all harddrives for this file (I found 6 copies of 5 different versions), and rename all of them except my PHP install dir copy.  PHP, Apache and MySQL all function as expected after making this change.
up
-4
ashay dot chaudhary at microsoft dot com
4 years ago
Q: I heard it's possible to access Microsoft SQL Server from PHP. How?

"On Windows machines, you can simply use the included ODBC support and the correct ODBC driver."
There is a better solution now, download the SQL Server Driver for PHP from Microsoft's Download Center, it is officially supported by Microsoft.

Source code: sqlsrvphp.codeplex.com
To Top