پرش به محتوا
ابزارها

SQL جست‌وجو و جایگزینی

نشانی سایت خود را تغییر دهید، بی‌آنکه داده‌های سریالایز‌شده خراب شوند

در مرورگر شما اجرا می‌شود. هیچ‌چیز آپلود نمی‌شود.

تغییر

قبل از اجرای هر چیزی این را بخوانید

WordPress بسیاری از گزینه‌ها را به‌صورت رشته‌های PHP-serialized ذخیره می‌کند و یک رشته‌ی سریال‌شده طول بایت خودش را ثبت می‌کند — s:19:"http://old-site.com". یک جای‌گزینی ساده‌ی SQL متن را تغییر می‌دهد اما طول را نه، بنابراین PHP دیگر نمی‌تواند آن ردیف را از حالت سریال خارج کند. خطایی هم نمی‌دهد. مقدار فقط بی‌سروصدا خالی می‌شود.

چه چیزی را از دست می‌دهید: پیکربندی ابزارک‌ها، تغییرات پوسته، و بیشتر تنظیمات افزونه‌ها. معمولاً تا چند روز بعد متوجه نمی‌شوید، و تا آن موقع نسخهٔ پشتیبانی هم که می‌شد بازیابی کنید از بین رفته است.

به همین دلیل است که کوئری‌های زیر عمداً به wp_options دست نمی‌زنند.

چه چیزی را جابه‌جا می‌کنید؟
search-replace.sql

ابتدا از پایگاه داده نسخهٔ پشتیبان بگیرید. نه «به گرفتنش فکر کنید» — بگیرید. برای UPDATE هیچ راه بازگشتی وجود ندارد.

درباره SQL جست‌وجو و جایگزینی

یک جست‌وجو و جایگزینی سادهٔ SQL روی پایگاه‌دادهٔ وردپرس، هر گزینهٔ سریالایز‌شده‌ای را که لمس کند خراب می‌کند، چون طول رشتهٔ ذخیره‌شده دیگر با مقدار جدید هم‌خوان نیست. این ابزار کوئری‌های امن را می‌سازد و دقیقاً توضیح می‌دهد کدام‌ها امن نیستند.

پرسش‌های متداول

پرسش‌ها

آیا می‌توانم آدرس سایت وردپرس خود را با یک جست‌وجو و جایگزینی SQL تغییر دهم؟

نه به‌صورت امن، و این پرتکرارترین نصیحت بد در وردپرس است. بسیاری از تنظیمات به‌صورت رشته‌های سریالایز‌شده PHP ذخیره می‌شوند که طول بایت خودشان را ثبت می‌کنند. یک جایگزینی ساده SQL متن را تغییر می‌دهد اما طول را نه، پس PHP بی‌سروصدا در unserialize کردن ردیف شکست می‌خورد و مقدار به‌سادگی ناپدید می‌شود — و تنظیمات ابزارک، تغییرات قالب و پیکربندی افزونه را هم با خودش می‌برد.

به‌جای آن از چه چیزی باید استفاده کنم؟

WP-CLI: اول 'wp search-replace old new --all-tables --dry-run'، بعد بدون --dry-run. این سریالایز شدن را می‌فهمد و پیشوندهای طول را درست بازنویسی می‌کند. اگر دسترسی CLI ندارید، افزونه Better Search Replace همین کار را از پنل مدیریت انجام می‌دهد.

آیا باید ستون GUID را به‌روزرسانی کنم؟

نه. GUID یک شناسه یکتای دائمی برای یک نوشته است، نه یک لینک، و خواننده‌های فید بر اساس آن کار می‌کنند. بازنویسی‌اش باعث می‌شود هر مشترک هر نوشته قدیمی را به‌عنوان کاملاً جدید ببیند. مستندات وردپرس صراحتاً می‌گوید آن را تغییر ندهید.