Basit bir bulma ve değiştirme yapmak için SQL Sorgusu


20

Ne zaman yeni bir web sitesi oluştursam, önce "stage.domain-name.com" gibi bir alt etki alanında bir hazırlama sitesi oluştururum.

Her şey düzgün çalıştıktan sonra ben veritabanını ihracat, notepad ++ açın ve "subdomain.domain-name.com" için bir bul / değiştir ve "domain-name.com" ile değiştirin ... sonunda yeni bir içine almak canlı site için veritabanı.

Benim sorum ... phpmyadmin kullanarak tüm veritabanında bu basit bulma / değiştirme yapmak istedim ne SQL sorgusu çalıştırmak gerekir?

-CH


Sorgulara aşina değilseniz, Ara ve Değiştir eklentisini deneyin, wordpress.org/extend/plugins/search-and-replace
t31os

URL'yi güncellemek için neden WordPress işlevini kullanmıyorsunuz? codex.wordpress.org/Moving_WordPress her şeyi detaylandırıyor
Alex

Bunun için bir eklenti var. Arka ucun rahat bir şekilde kullanılmasına izin verir ve ayrıca aşağıdaki durumlarda, içerik sonrası ve diğer bazı alanlardaki URL'nin yerini alır: wordpress.org/plugins/better-search-replace
simonthesorcerer

Yanıtlar:


13

URL'nizin kaydedildiği tablo wp_options şeklindedir. Siteniz için URL'yi kullanan sütunlarda bir güncelleme yapmalısınız:

UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "home"

Bazı değer eksik olabilir, ama bu bul / değiştir işlemini tekrar yaptığınızda, güncellenmesi gereken değerleri ve tabloları fark edip bu komut dosyasına ekleyebilirsiniz.

WordPress Codex'un bir site URL'sini nasıl değiştireceğiniz konusunda güzel bir kılavuzu vardır, belki de sizin için daha da kullanışlı: Site URL'sini değiştirme


1
tüm veritabanında bul / değiştir yapmanın bir yolu yok mu? Başka bir deyişle ... Örneğin medya kütüphanesi de dahil olmak üzere farklı yerlerde bir sürü URL'leri değiştirmek gerektiğini fark ettim .... Eğer tüm veritabanı için esasen her alan için bir bul / değiştir varsa o zaman bu çözmek sorun. Yardımınız için teşekkürler
NetConstructor.com

Cevaba eklediğim yeni bağlantıya göz atın. Bence bu yolun bir yolu.
Fernando Briano

1
Serileştirilmiş veriler için çalışmaz. Bazı tema yapılandırmasını tamamen bozabilir.
Christian Lescuyer

29

En iyi seçenekler, yayınlar, içerik yayınlama ve meta yayınlama:

UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');

UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

Ayrıca bkz. PhpMyAdmin ve MySQL Kullanarak Veri Arama | Packt Yayıncılık. Ve Arama RegEx , tüm yazı ve sayfalarda Grep ile arama ve değiştirme yapabilmek için iyi bir WP eklentisidir.

16/6/2015 Güncellemesi: Bir sonraki cümlede bağlı olan aracı kullanmak çok daha iyidir, çünkü bir veritabanı dökümünde yukarıdaki gibi basit bir bul / değiştir serileştirilmiş verileri bozacaktır. Bkz. İnterconnectit.com WordPress Serileştirilmiş PHP Arama Değiştirme Aracı. Bu şekilde, serileştirilmiş verileri bozmazsınız ve ara bağlantı komut dosyası her yerde URL'leri değiştirdiği için yayın içeriğinde RegEx'i çalıştırmanız gerekmez. Siteleri farklı alanlara taşımak veya eklentiler olmadan SSL'yi zorlamak ve güvensiz öğe hatalarını önlemek için içerikteki tüm URL'leri değiştirmek için http'den https'ye genel bir değişiklik yapmak için her zaman bu aracı kullanıyorum.


2
Yeni bir alan adına gitseniz bile, kılavuzu asla değiştirmeyin. Yayınlar yeni bir veritabanına dışa aktarılıyorsa / içe aktarılıyorsa kimlik değişebileceğinden yayını benzersiz bir şekilde tanımlamak için kullanılır. Bir kere, RSS okuyucular belirli bir makalenin okunup okunmadığını söylemek için GUID'i kullanacaktır. Kılavuzun değiştirilmesi, tüm makalelerinizi etkili bir şekilde yeniden yayınlayacaktır.
Taylor Dewey

@taylordewey dedi: "Asla kılavuzu değiştirme ..." Saçma.
markratledge

1
@songdogtech Neden saçma olduğunu açıklamak ister misiniz?
shea

1
Neden kimse olurdu sahip GUID değiştirilir?
kaiser

1
Serileştirilmiş veriler için çalışmaz. Bazı tema yapılandırmasını tamamen bozabilir. Gerçekten de Interconnect / IT'ler gibi bir araç kullanın.
Christian Lescuyer

9

Bu kullandığım büyük bir açılan komut dosyasıdır ve WP'nin seçenekleri saklamak için kullandığı serileştirilmiş dizilerle güzel çalışır. İşiniz bittiğinde uzak sunucunuzdan sildiğinizden emin olun, çünkü bu çok büyük bir güvenlik riskidir.

https://interconnectit.com/products/search-and-replace-for-wordpress-databases/


2
Neden -1'miş olduğumu bilmiyorum. Bu komut dosyası bir SQL ifadesinden çok daha iyidir. Geribildirim lütfen?
lancemonotone

1
sql bilmeyen insanların kullanabileceği bir araç sql yazanlar için üzücü
Jon

4

Bunun için WP-CLI kullanıyorum çünkü en kolay buluyorum ve seri veri ile ilgileniyor.

wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid

Gerçek veritabanını değiştirmek yerine değişikliklerinizi SQL dosyasına yazan bir seçenek de vardır:

wp search-replace foo bar --export=database.sql


açık ara en sağlam ve en hızlı çözüm. wp-cli günü bir kez daha kaydeder
ryanrain

3

bunu yapmak zorunda değilsiniz, göreli yolları kullanabilirsiniz.

subdomain.soemthing.com/image.jpg yerine bir şey bağlarken - örneğin /image.jpg kullanın

bunun gibi ilk etapta problemle yüzleşmeyeceksiniz.

Aksi takdirde bir mysql güncelleme deyimi için kullanabilirsiniz

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, find this string’, replace found string with this string’);

Teşekkürler ... evet bunu bir dahaki sefere yapacağım. SQL deyimi tüm veritabanında (tüm tablolar dahil) bir buluntu yerine geçer mi?
NetConstructor.com

@ NetConstructor.com mireille yukarıda size verilen SQL deyimi, belirli bir tablodaki belirli bir alandaki bir dizeyi değiştirmek için kullanılan genel MySQL komutudur. Bu ifadeyi tam olarak yazıldığı gibi çalıştırmayı denediyseniz işe yaramaz. Bu komutun çalışması için TABLE_NAME ve FIELD_NAME dosyalarını WordPress tarafından kullanılan gerçek bir alan ve tablo olarak değiştirmeniz gerekir.
Manzabar

Ayrıca göreli yollar kullanmak isteseniz bile, wordpress'in birçok parçasının tam yolları otomatik olarak ekleme eğiliminde olduğunu unutmayın. Gerçekten bu gibi bir eklenti çalıştırmak için: wordpress.org/plugins/root-relative-urls çok, çok yararlı
benz001

2

Wordpress etki alanını sık sık ihtiyaç duyduğumuz şeyi değiştirmek için, siteyi localhost'tan canlı hale getirmek olabilir: Bu, güncelleme sorgularının tam bir listesidir:

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_url = replace(link_url, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_image = replace(link_image, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

/*UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl' OR option_name = 'widget_text' OR option_name = 'dashboard_widget_options';*/
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com');
  • Gerekirse WP ile varsayılan olmayan diğer tabloları da eklemeliyiz.

GÜNCELLEME: Arama DB sürüm 3.1.0 değiştirin PHP serileştirilmiş dizeleri veya nesnelerine zarar vermeyen veritabanı geniş arama / değiştirme eylemleri yürütmek için, geliştiriciler için kullanıcı dostu, ön uç bir araçtır.


2
Serileştirilmiş veriler için çalışmaz. Tema yapılandırmasını tamamen bozabilir.
Christian Lescuyer

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.