Merhabalar bu sefer de çok oldun artık sen yusuf der gibisiniz ya da ben öyle hissediyorum :) .  Geçenler de ceviz.net‘ te bir kullanıcımız bir sql sorgusu ile sayfanın farklı farklı yerlerinde yeniden kullanmak istediğini ancak sql sorgusunu sadece bir kere kullanıp while ile döngüye girip alabildiğinden yakınmıştı. Aslında tam olarak yapmak istediği şey bir sql sorgusu ile dönen sonuçları sayfanın farklı farklı yerlerinde aynı sorguyu tekrarlamadan yazdırmaktı.

Kullanıcının bu dediğini yapamamamızın nedeni ise sql sorgusu yapıldığında imlecin sonuna gitmesidir böyle olunca da aynı sorguyu başa almadığımız için farklı farklı yerlerde yeniden kullanamamaktayız. İşte burada bize yardıma php ‘nin mysql ve mysqli fonksiyonlarından mysql_data_seek() ve mysqli_data_seek() fonksiyonları yetişmekte. İsterseniz birer örnekle konumuzu detaylandıralım. Öncelikle bir veritabanı oluşturduğunuzu varsayarak aşağıya bir sql kodlarını veriyorum.

CREATE TABLE data_seek_test_tablo(
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
ad varchar(50) NOT NULL,
soyad varchar(50) NOT NULL
);
 
INSERT INTO data_seek_test_tablo(ad,soyad) VALUES ('yusuf','koç');
INSERT INTO data_seek_test_tablo(ad,soyad) VALUES ('akın','yorulmaz');
INSERT INTO data_seek_test_tablo(ad,soyad) VALUES ('ersin','ölmez');

yukarıdaki sql satırlarını phpmyadmin veya türevi bir arayüz ile veritabanınızda tablo ve bilgileri eklediğinizi varsayıyorum.

Şimdi gelelim tek sorgu yaptık ve bunu farklı farklı yerlerde kullanmaya… Şimdi öncelikle bir genel sorgumuzu yapalım

< ?php
mysql_connect('locahost','root','') or die (mysql_error());
mysql_select_db('veritabani_adi') or die (mysql_error());
 
$query = mysql_query("SELECT * FROM data_seek_test_tablo");
while ($rows = mysql_fetch_array($query))
{
echo $rows['id'].' '.$rows['ad'].' '.$rows['soyad'].'<br />';
}
?>
yusuf koç
akın yorulmaz
ersin ölmez

üstteki betik bize tanımladığımız tablodaki tüm verileri listeleyip işlemini tamamlayacaktır. Fakat sayfanın alt kısımlarında ikinci bir while ile tekrar verileri yazdırmak istediğimiz de hata alacağızdır.  Onun için imleci tekrar başa almak gerekiyor bunu da mysql_data_seek() ile yapıyoruz.

< ?php
mysql_connect('locahost','root','') or die (mysql_error());
mysql_select_db('veritabani_adi') or die (mysql_error());
 
$query = mysql_query("SELECT * FROM data_seek_test_tablo");
while ($rows = mysql_fetch_array($query))
{
echo $rows['id'].' '.$rows['ad'].' '.$rows['soyad'].'<br />';
}
 
mysql_data_seek($query,0);
 
while ($rows = mysql_fetch_array($query))
{
echo $rows['id'].' '.$rows['ad'].' '.$rows['soyad'].'<br />;
}
?>
yusuf koç
akın yorulmaz
ersin ölmez
yusuf koç
akın yorulmaz
ersin ölmez

bu betik çalıştırıldığında ise göreceksiniz ki tek $query sorgusu ile iki adet while kullandık bunun sonucunda iki kere aynı kayıtları bastığını göreceksiniz.

Bunun yanında mysql_data_seek() fonksiyonundaki 0 ( sıfır ) imleci sorgunun başına alır. 0 yerine örneğin 1 derseniz tablodaki ikinci kayıttan itibaren listelemeye başlar. Bunu da anlamamız için bir örnek yapalım.

< ?php
mysql_connect('locahost','root','') or die (mysql_error());
mysql_select_db('veritabani_adi') or die (mysql_error());
 
$query = mysql_query("SELECT * FROM data_seek_test_tablo");
while ($rows = mysql_fetch_array($query))
{
echo $rows['id'].' '.$rows['ad'].' '.$rows['soyad'].'<br />';
}
 
mysql_data_seek($query,1);
 
while ($rows = mysql_fetch_array($query))
{
echo $rows['id'].' '.$rows['ad'].' '.$rows['soyad'].'<br />';
}
?>
yusuf koç
akın yorulmaz
ersin ölmez
akın yorulmaz
ersin ölmez

Bunda da göreceksiniz ki “yusuf koç” ikinci while dikkate alınmadı çünkü imlec ikinci kaydın başına getirildi.

Sabırla okuduğunuz için saolun var olun :)