Database – Dubluve.net http://www.dubluve.net Biz de yazılımcıyız Fri, 27 May 2016 21:57:40 +0000 tr-TR hourly 1 http://i2.wp.com/www.dubluve.net/wp-content/uploads/2016/04/logo_small.png?fit=32%2C29 Database – Dubluve.net http://www.dubluve.net 32 32 konsoldan mysql root sifresini sifirlamak http://www.dubluve.net/2014/08/31/konsoldan-mysql-root-sifresini-sifirlamak/ http://www.dubluve.net/2014/08/31/konsoldan-mysql-root-sifresini-sifirlamak/#respond Sun, 31 Aug 2014 13:17:32 +0000 http://www.dubluve.net/?p=2908 Özet olarak bu işlem için, konsoldan mysql şifresini sıfırlamamız icap ettiğinde mysqli yetkisiz bir şekilde başlatıp, işlemlerimizi yapıp sonra tekrar başlatarak işlemlerimizi tamamlamış olacağız.

İzlenmesi gereken adımlar :

Mysql’i durdurun.

/etc/init.d/mysqld stop

Şimdi, skip-grant özelliği ile tekrar başlatıyoruz:

mysqld_safe --skip-grant-tables

Şimdi Mysql’e passwordsüz bağlanacağız. (ayrı bir konsolda)

mysql -u root

Aşağıdaki komutları sırası ile verelim ve yeni şifremizi belirleyelim.

mysql> use mysql;
mysql> update user set password=PASSWORD("yeni_sifremiz") where User='root';
mysql> flush privileges;
mysql> quit;

Mysql’i yeniden durduralım

/etc/init.d/mysqld stop

Şimdi de normal bir şekilde başlatalım

/etc/init.d/mysqld start

İşlem tamamdır 🙂

]]>
http://www.dubluve.net/2014/08/31/konsoldan-mysql-root-sifresini-sifirlamak/feed/ 0
Mac OS X Nginx PHP 5.3 ve percona-server (mysql) kurulumu http://www.dubluve.net/2014/07/26/mac-os-x-nginx-php-5-3-ve-percona-server-mysql-kurulumu/ http://www.dubluve.net/2014/07/26/mac-os-x-nginx-php-5-3-ve-percona-server-mysql-kurulumu/#respond Sat, 26 Jul 2014 01:42:53 +0000 http://www.dubluve.net/?p=2887 Bu yazıda Mac OS X üzerine Nginx ve PHP5.3 (özellikle php5.3, daha yenisi değil) kurmayı anlatmaya çalışacağım.

İnternetteki dökümanlar genelde konu güncel iken yazıldığı için, siz bir yazılım dilinin daha önceki versiyonlarına ait kurulumlar yapmak istediğinizde, varsayılan paket yöneticisi tarafından hep en son sürümü kurulmakta, ve bu da bizim o anki ihtiyaçlarımızı karşılamamaktadır.

Ben de birkaç tane projedeki php 5.3 gereksinimim sebebiyle böyle bir şey yapmak durumunda kaldım. (aslında vagrant daha güzel bir çözüm tabi ki dileyen araştırabilir.)

Öncelikle Mac’inizde homebrew (http://brew.sh/) yüklü değilse, bunu yüklememiz gerekiyor. Bunun için konsolunuzda

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

komutunu çalıştırmanız gerekiyor.

Nginx kurulumu

brew install nginx

Bu kadar basit 🙂
Nginxi başlatmak için

nginx

komutunu yazmanız yeterli. (Evet konsola sadece nginx yazacağız, ubuntu gibi değil) Ancak sudo olarak çalıştırmanız gerekebilir.
Php kurulumu

php yi Nginx ile iletişim kurabilmesi için 2 şekilde kurabiliriz. 1. yöntem cgi ile. 2. yöntem ise, php-fpm ile. php-fpm ile kurmak daha mantıklı, çünkü fcgi process manager ile yönetilmeyen bir cgi kullanımı aynı anda çok fazla processi handle etmenizi yani stress test vb toolları çalıştırdığınız kısımlarda size problem çıkartabilir. Ben de bu ve birkaç sebepten dolayı php-fpm ile kurmayı anlatacağım. Ancak cgi ile kurmak isteyen için de sadece 1 parametre değişiyor 🙂

brew install php53 --with-mysql --with-suhosin --with-intl --with-imap --with-fpm

sondaki —with-fpm kısmı yerine –with-cgi yazarsanız da cgi ile kurmuş olursunuz.

Mac OS X içerisinde PHP, Ruby, Python gibi dillerin CLI (konsol üzerinden çalıştırılabilir) versiyonları ile birlikte geldiği için şu anda halen konsolda php -v yazdığınızda php 5.4.24 veya benzeri başka bir versiyonu görürsünüz. Ancak web arayüzünden (Yani browserdan nginx ile) girdiğinizde ilgili php 5.3 sürümünü çalıştırmış olacağız.

Eğer siz konsoldan da php 5.3 çalıştırmak istiyorsanız,

export PATH=/usr/local/Cellar/php53/5.3.28/bin:$PATH

şeklinde komut çalıştırmanız gerekiyor. (sudo ile çalıştırmanız icap edebilir).
Ancak bu şekilde yaparsanız da bilgisayarınızı yeniden açtığınızda (ya da konsoldaki oturumu kapattığınızda) bu ayar kaybolacaktır. Bunu kaybetmemek için bu komutu /usr/local/Cellar/php53/5.3.28/bin i sudo ile /etc/paths e yazmalısın.

Mac OS X üzerinde php-fpm ubuntudaki gibi /etc/init.d/php-fpm start stop, vb.. şeklinde kullanılamıyor. Bu yüzden kullanımı biraz farklı.
Php-fpm yi hemen başlatmak için

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php53.plist

Bilgisayarınız her açıldığında otomatik başlasın istiyorsanız da

ln -sfv /usr/local/opt/php53/*.plist ~/Library/LaunchAgents

şeklinde işlem yapmanız gerekiyor.

Şimdi sıra php-fpm.conf dosyasını bulup, buradaki ayarlardaki loglara veya dosyalara izin vermek kısmında.
php-fpm.confu bulup ilgili pid ve log dosyasını ve access log dosyasını yazabilmesi için yetki vb verip o gerekli klasörleri oluşturursan gerisi tamamdır. (Yine ubuntunun aksine, /var/run/php-fpm.pid yerine phpnin kendi klasörüne yapmanız daha mantıklı olacak ben bu şekilde yaptım. Log için de aynı yeri belirttim.)

 

percona-server kurulumu

Nginx kadar basit aslında.

brew install percona-server

Percona server’i hemen başlatmak için

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.percona-server.plist

Bilgisayar her başladığında başlatmak için ise,

ln -sfv /usr/local/opt/percona-server/*.plist ~/Library/LaunchAgents

komutlarını çalıştırmanız gerekiyor.

Bu yazı nginx ayarları, php ayarları ve mysql ayarlarının nasıl yapıldığı ile ilgili olmadığı için o detayları burada paylaşmıyorum. Ancak ihtiyacı olan tabi ki danışabilir.

Umarım yararlı olur.

]]>
http://www.dubluve.net/2014/07/26/mac-os-x-nginx-php-5-3-ve-percona-server-mysql-kurulumu/feed/ 0
Sayısal Veri İçeren Karakter Alanlar http://www.dubluve.net/2014/07/16/sayisal-veri-iceren-karakter-alanlar/ http://www.dubluve.net/2014/07/16/sayisal-veri-iceren-karakter-alanlar/#respond Wed, 16 Jul 2014 16:39:40 +0000 http://dubluve.net/?p=2875 Oracle veri tabanında, sayısal veri içermesi beklenen karakter tipinde (CHAR,VARCHAR) alanlar sorun yaşamak için birebirdir. Örneğin müşteri numarası tutulan bir alana, servis ve grafik arayüz seviyesinde yeterli kontroller yapılmazsa müşteri adı, soyadı..vs gibi bilgiler yazılıyor olabilir 🙂 Bu alanda to_number() kullanarak bir sorgu yazdığınızda ve ya tabloyu bu alan üzerinden başka bir tablodaki nümerik bir alana bağlamak istediğinizde ORA-01722 hatası alırsınız.

Alanın yer aldığı tablodaki satırları düzeltmek için hangisinde hata olduğu bulmak da ayrı bir sorundur. Bunun için UPPER () ve LOWER () metotlarını kullanabilirsiniz. UPPER () ve LOWER () metotları numerik değerler için aynı, karakter değerleri için farklı sonucu vereceğinden, hatalı satırlara ulaşabilirsiniz. Diyelim ki tablomuzun adı MUSTERI, alanın adı MUSTERINO olsun:


CREATE TABLE MUSTERI
(
RECORDOID NUMBER(16) NOT NULL,
MUSTERINO VARCHAR(10) NOT NULL,
MUSTERIADI VARCHAR(10) NOT NULL
);

Tabloya bazı kayıtlar atalım:


Insert into MUSTERI
(RECORDOID, MUSTERINO, MUSTERIADI)
Values
(4, '!', 'aslan');
Insert into MUSTERI
(RECORDOID, MUSTERINO, MUSTERIADI)
Values
(3, '-', 'aslan');
Insert into MUSTERI
(RECORDOID, MUSTERINO, MUSTERIADI)
Values
(2, 'bogac', 'aslan');
Insert into MUSTERI
(RECORDOID, MUSTERINO, MUSTERIADI)
Values
(1, '100', 'bogac');
COMMIT;

Tabloyu yarattıktan sonra geçersiz değerler içeren satırları bulalım:


SELECT *
FROM MUSTERI M
WHERE UPPER(M.MUSTERINO) != LOWER(M.MUSTERINO)

Bu çözüm UPPER ve LOWER metotlarında aynı sonucu veren bazı diğer karakterler (“!”,”-” gibi) için yeterli olmayabilir, sadece bu karakterleri içeren satırlar olduğundan şüpheleniyorsanız ek sorgular yazmak gerekebilir. Sorunla Oracle veri tabanında karşılaşmış olsam da, diğer veri tabanı sistemleri için de çözüm olacağını düşünüyorum.

Kolay gelsin 🙂

]]>
http://www.dubluve.net/2014/07/16/sayisal-veri-iceren-karakter-alanlar/feed/ 0
mysql_real_escape_string DBAL dengi (equivalent) http://www.dubluve.net/2014/06/21/mysql_real_escape_string-dbal-dengi-equivalent/ http://www.dubluve.net/2014/06/21/mysql_real_escape_string-dbal-dengi-equivalent/#respond Fri, 20 Jun 2014 23:18:08 +0000 http://dubluve.net/?p=2868 Benim gibi projenizde bir altyapı değişikliği yapıyorsanız, muhtemelen yeniden ele aldığınız kısımlardan biri de veritabanı bağlantısı ile ilgili kısımlar oluyor. Biz de bu noktada Doctrine DBAL kullanmaya karar verdik. Henüz ORM implemente etmek için yolumuz var. O yüzden sadece DBAL katmanını kullanacağız. Ancak burada mysql_real_escape_string vasıtası ile escape ettiğimiz verileri, artık DBAL tarafına geçerken birsürü yerde replace işlemi yapmak istemiyorsanız birkaç önerim olacak.

mysql_Real_Escape artık projenizde düzgün çalışmayacaktır diye tahmin ediyorum. Çünkü artık classlar üzerinden çalışıyorsunuz, ve buradaki mysql doğru connectionı bulamayabilir. (özellikle master slave ilişkili çift veya daha fazla db mimarisinde)

Tabi ki işin doğrusu statement->prepare metodu üzerinden bindParam veya bindValue ile ilerlemek. Ancak bunları için oldukça uzun bir vakit gerekebilir.

Biz de mysql_real_escape_string’in karşılığı olarak bir metod bulduk. Connection nesnesi üzerinde bulunan quote metodu.

 

$conn->quote(”) dediğimiz metod tam da istediğimiz şekilde çalışıyor. Hatta connection objesindeki ekstra parametreler kısmına ATTR_EMULATE_PREPARES=> true verirseniz, bu metod bildiğiniz mysql_Real_escape işlemini yapıyor. bu parametredeki tek handikap, çoklu querylerin tek seferde çalıştırılamaz hale gelmesi oluyor.

quote’un mysql_Real escape’ten tek farkı başına ve sonuna bir tırnak koyuyor. siz bunları substr ile çıkartırsanız birebir aynı olacaktır.

 

dikkat etmeniz gereken bir şey de şu ki, mysql server’ınızın encoding’i ile (server encodinginizin mysql e bağlanıp show variables like ‘%char%’ seklindeki degisklenlerden gorebilirsiniz) connection (DBAL ayarlarından verilen encoding) aynı olması gerkeiyor ki güvenli bir escape işlemi yapılabilsin.

]]>
http://www.dubluve.net/2014/06/21/mysql_real_escape_string-dbal-dengi-equivalent/feed/ 0
Mysql – birden fazla IP den mysqle baglanmak http://www.dubluve.net/2013/05/20/mysql-birden-fazla-ip-den-mysqle-baglanmak/ http://www.dubluve.net/2013/05/20/mysql-birden-fazla-ip-den-mysqle-baglanmak/#comments Mon, 20 May 2013 07:19:42 +0000 http://dubluve.net/?p=2611 Eğer 2 farklı IP’deki sunucunuz, aynı mysql sunucusuna bağlanması gerekiyorsa yapmanız gereken temel olarak bir kaç maddelik işiniz var demektir. Bunları listeleyelim :

  1. Bağlanılan (mysql-server’in olduğu makinenizde) mysql konfigürasyon dosyanızı bulun. (işletim sisteminiz centos ise /etc/my.cnf gibi bir yerde, ubuntu ise, /etc/mysql/my.cnf gibi bir yerdedir). 
  2. my.cnf içerisinde bind-address diye bir parametre varsa, onu 0.0.0.0 şeklinde düzeltin, yoksa
    bind-address = 0.0.0.0

    şeklinde yeni bir satır ekleyin (çünkü varsayılan değeri 127.0.0.1 yani localhost tur)

  3. my.cnf içerisinde skip-networking diye bir parametre varsa onu silin. (veya başına # işareti koyarak yorum haline getirin.)
  4. Mysqlinizi yeniden başlatın. (service mysql restart)
  5. şu anda veritabanınız dışarıdan bağlantılara açık hale geldi. Ancak bu bi güvenlik tehdidini de beraberinde getirir. Doğrudan bir tehlike değil bu ancak, root şifrenizi deneye yanıla(brute-force teknikleri de dahil) bulabilirler, veya yanlış vermiş olduğunuz yetki, user var ise, bunları keşfedebilirler)  Bu yüzden bir firewall kullanmalıyız. Halihazırda iptables vardır diye düşünüyorum. iptables için bir kural ekleyelim ve istemediğimiz ipler dışındaki istekleri drop edelim, böylece sadece istediğimiz IP’ler networkten içeri girebilsin. :
    iptables -A INPUT -p tcp --dport 3306 ! -d xxx.xxx.xxx.xxx -j DROP
  6. bir user ekleyin.
    CREATE USER 'kullanici'@'ip_Adresi' IDENTIFIED BY 'şifre';
  7. Bu kullanıcıya ilgili IP için yetki verin(hangi yetkileri istiyorsanız)
    GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES , CREATE VIEW , EVENT, TRIGGER, SHOW VIEW , CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `database_adi` . * TO 'kullanici'@'ip_Adresi';
  8. Testlerinizi yapın. Bu testleri hem bağlanmasını istediğiniz makineler için, hem de istemediğiniz makineler için mutlaka yapın. mysql-client yüklü ise şöyle yapabilirsiniz :
    mysql -u kullanici -h ip_Adresi database_adi

mysql bağlantıları için iptables kuralları kaynak: http://www.cyberciti.biz/faq/unix-linux-mysqld-server-bind-to-more-than-one-ip-address/

]]>
http://www.dubluve.net/2013/05/20/mysql-birden-fazla-ip-den-mysqle-baglanmak/feed/ 1
mysql’deki tablonun olup olmadığını kontrol etmek (php kullanarak) http://www.dubluve.net/2013/04/18/mysqldeki-tablonun-olup-olmadigini-kontrol-etmek-php-kullanarak/ http://www.dubluve.net/2013/04/18/mysqldeki-tablonun-olup-olmadigini-kontrol-etmek-php-kullanarak/#comments Wed, 17 Apr 2013 22:49:36 +0000 http://dubluve.net/?p=2576 Php ile çalışırken, mysql’de kullandığımız veritabanı içerisinde, herhangi bir isimdeki tablonun var olup olmadığını kontrol etmenin bir kaç yolu vardır. Bu yazıda onlardan bahsedeceğim.

Bunlardan ilki, SHOW TABLES querysini kullanmaktır.

Örneğin, test isminde bir veritabanımız olsun. İçerisindeki tabloların ismi de, admin, member, log, test1, test2 olsun. Yani mysql’e konsoldan bağlanıp use test dedikten sonra, show tables dediğimizde karşımıza şu çıksın.

+------------------------+         |
| admin                  |
| member                 |
| log                    |
| test1                  |
| test2                  | 
+------------------------+

Şimdi işin Php kısmına geçelim.

// burada mysql'e bağlanmış olalım.

$result = mysql_query( "SHOW TABLES FROM test" );

if (! $result) {
	echo "Sorguda hata meydana geldi 
"; echo 'mysql error: ' . mysql_error(); } else { $row = array(); while ( $row = mysql_fetch_row( $result ) ) { echo "Tablo ismi : ".$row[0]."
"; } } mysql_free_result( $result );

SHOW TABLES FROM test querysinin ardından, LIKE parametresi ekleyerek, sonucu daraltabiliriz. Ardından da sonuçları php ile parse ederek, aradığımız isimdeki tablonun olup olmadığını kontrol edebiliriz. (SHOW TABLES FROM test LIKE ‘%min%’ gibi)

İkinci yöntemimiz ise, mysql’deki information_schema databasei içerisindeki TABLES tablosundaki bilgiler. Bu tabloda TABLE_SCHEMA sütununda veritabanı isimleri TABLE_NAME sütununda ise tablo isimleri yer almaktadır.

SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = ‘{database ismi}’ AND table_name = ‘{tablo ismi}’ şeklinde çalıştıracağımız sorgudan gelen sonuç ile istediğimizi elde etmiş olacağız. Yapalım;

// burada mysql'e bağlanmış olalım.

$result = mysql_query( "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='test' AND table_name='test1'" );

if (! $result) {
	echo "Sorguda hata meydana geldi 
"; echo 'mysql error: ' . mysql_error(); } else { $count = mysql_num_rows($result); if($count == 1){ // tablo var, gerekli işlemler } else { // tablo yok, gerekli işlemler } } mysql_free_result( $result );
]]>
http://www.dubluve.net/2013/04/18/mysqldeki-tablonun-olup-olmadigini-kontrol-etmek-php-kullanarak/feed/ 2
Konsoldan mysql versionunu ogrenmek http://www.dubluve.net/2012/12/06/konsoldan-mysql-versionunu-ogrenmek/ http://www.dubluve.net/2012/12/06/konsoldan-mysql-versionunu-ogrenmek/#comments Thu, 06 Dec 2012 12:48:27 +0000 http://dubluve.net/?p=2347 İşletim sisteminizin konsolunda

echo "SELECT VERSION()" | mysql -u root -p{sifre}

yazdığınızda ekranınızda kullandığınız mysql versiyonu gözükecektir.

]]>
http://www.dubluve.net/2012/12/06/konsoldan-mysql-versionunu-ogrenmek/feed/ 9
uzun süre calisan mysql processleri oldurmek http://www.dubluve.net/2012/12/03/uzun-sure-calisan-mysql-processleri-oldurmek/ http://www.dubluve.net/2012/12/03/uzun-sure-calisan-mysql-processleri-oldurmek/#comments Mon, 03 Dec 2012 09:46:32 +0000 http://dubluve.net/?p=2338 Sunucunuzda bazı durumlarda, mysql veritabanınızda işlemler yığılmaya başlıyor olabilir.

Bu durum için bir arkadaşımın yazmış olduğu basit bir php scripti mevcut. Dilerseniz işinizi kolaylaştırabilir.

Script, verdiğiniz süreden daha büyük süre değerine sahip mysql processleri yakalayıp, bunları KILL ediyor (öldürüyor).
* kullanıcı adı kısmına root, root şifresi yazan kısma da root şifrenizi yazarak çalıştırabilirsiniz.

 

<?
var_dump(mysql_connect("localhost", "{kullanici_adi}", "{root_sifresi}"));
$result = mysql_query("SHOW FULL PROCESSLIST");
$i=0;
while ($row=mysql_fetch_array($result)) {
  $process_id=$row["Id"];
  if ($row["Time"] > 5000 ) {
    $sql="KILL $process_id";
    $i++;
    mysql_query($sql);
  }
}
echo $i." adet islem sonlandirilmistir";
?>
]]>
http://www.dubluve.net/2012/12/03/uzun-sure-calisan-mysql-processleri-oldurmek/feed/ 5
mysql acik baglantilari ve processleri goruntuleme http://www.dubluve.net/2012/12/01/mysql-acik-baglantilari-ve-processleri-goruntuleme/ http://www.dubluve.net/2012/12/01/mysql-acik-baglantilari-ve-processleri-goruntuleme/#comments Sat, 01 Dec 2012 11:32:46 +0000 http://dubluve.net/?p=2327 mysql’e konsoldan bağlandıktan sonra show status like ‘Conn%’ komutunu çalıştırdığımızda açık olan bağlantıyı görüntüleyebiliriz.

mysql> show status like 'Conn%';
+-----------------------+---------+
| Variable_name | Value |
+-----------------------+---------+
| Connections     |  78     |
+-----------------------+---------+
1 row in set (0.00 sec)

Aynı şekilde eğer show status like ‘%onn%’ komutunu çalıştırdığımızda da bu sefer connection ile ilgili diğer alanların da sonuçları gelir karşımıza.

mysql> show status like '%onn%';
+-------------------------------------+----------+
| Variable_name                | Value |
+-------------------------------------+----------+
| Aborted_connects          |     1     |
| Connections                   |    78    |
| Max_used_connections   |     1    |
| Ssl_client_connects        |    0      |
| Ssl_connect_renegotiates |   0     |
| Ssl_finished_connects    |     0     |
| Threads_connected        |     1     |
+-------------------------------------+----------+
7 rows in set (0.00 sec)

Bunlara ek olarak bir de process list görüntüleyebiliriz, onu da şu komutla gerçeklememiz mümkün; show processlist

mysql> show processlist;
+----+------+--------------+-------+---------------+--------+--------+-------------------------+
| Id | User | Host      | db   | Command | Time | State  | Info                   |
+----+------+---------------+---------+------------+------+-----------+-------------------------+
| 77 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
+----+------+---------------+---------+-------------+------+----------+-------------------------+
1 row in set (0.02 sec)

Mysql ile işlem yaparken bu son komutu çalıştırdığınızda, daha farklı sonuçlar alabileceğinizi deneyerek görebilirsiniz.

]]>
http://www.dubluve.net/2012/12/01/mysql-acik-baglantilari-ve-processleri-goruntuleme/feed/ 1
Mysql baska tabloda kaydi olmayan kayitlari silmek http://www.dubluve.net/2012/11/13/mysql-baska-tabloda-kaydi-olmayan-kayitlari-silmek/ http://www.dubluve.net/2012/11/13/mysql-baska-tabloda-kaydi-olmayan-kayitlari-silmek/#comments Tue, 13 Nov 2012 20:57:20 +0000 http://dubluve.net/?p=2282 Veritabanınızdan zaman zaman aktif olmayan kişileri, hiç bir işe yaramayan verileri silmek istiyor olabilirsiniz. Bu noktada konuyu bir örnek ile açıklayacağım ;

Diyelim ki bir üyeler, bir de yorumlar tablomuz olsun. Yorumu olmayan üyeleri silmek isteyen bir query yazmak istiyoruz diyelim. Bu durumda aşağıdaki query ile bu işi yapabiliyoruz.
Subquery ile yorumları çekip bunları NOT EXIST ile denetliyoruz. Sonuç tam da istediğimiz gibi.

SELECT u.uye_id FROM `uyeler` u WHERE NOT EXISTS (SELECT yorum_id FROM yorumlar y WHERE y.uye_id = u.uye_id)

Çok fazla detaya girmeden anlattım, anlamayan olursa tabi ki detaylıca yardım edebilirim.

Umarım işinize yarayacaktır.

]]>
http://www.dubluve.net/2012/11/13/mysql-baska-tabloda-kaydi-olmayan-kayitlari-silmek/feed/ 8