19 Temmuz 2010

Hayat kurtaran sql: mysql replace();

ile hasan

Hostinginden ve  teknik desteğinden sorumlu olduğunuz bir blog var. Müşterinizi kırmamak için makul isteklerine “peki” demeniz gerekiyor. Müşteri “siteyi sizin sunucunuza taşıdık, gayet güzel ama bazı dosyalar koymuştum, onlara tıklayınca indirme penceresi açılmıyor. Neden?” diye soruyor.

Web sitesi üzerinden kırık linki denediğimde sorun hemen kendini gösteriyor. Link eski sunucunun “ip adresini” gösterecek sekilde verilmiş. Yeni sunucudaki ip adresi tutmadığı için linkler çalışmıyor. Yoksa dosyalar sağlam ve yerli yerinde.

En basitinden bir php script yazar, iki sql ile sorunu çözerim diye düşündüm: İlk sql bu ip’nin geçtiği satırları çekecek, while içerisinde str_replace ile link düzeltilecek ve ikinci bir sql ile aynı post update edilecek.

Tam yazmaya başlıyordum ki bu işlemi veritabanı yapamaz mı acaba dedim ve replace komutunu Mysql için arattım. Daha önce hiç kullanmamıştım, meğer varmış. Kullanımı da çok kolay. Böylece tek satır php yazmadan basit bir sql çalıştırarak zahmetsizce müşteriyi memnun edebildik.

İşte hayat kurtaran mysql replace komutunun kullanımına örnek:

update wp_posts set post_content=replace(post_content,”http://78.40.231.2/~olduser/”,”http://sub.domain.com/~newuser/”) where post_content like ‘%http://78.40.231.2/~olduser/%’