2014-05-02 40 views
0

我有一個列在表wp_postmeta caled meta_value在MySQL的phpMyAdmin與嵌入的代碼替換YouTube網址

列目前持有YouTube網址,但我們正在試圖改變URL的使用嵌入代碼。例如:

電流值

http://www.youtube.com/watch?v=ZHIhsLhQ-q8 

新值應爲

<iframe width="640" height="360" src="//www.youtube.com/embed/ZHIhsLhQ-q8" frameborder="0" allowfullscreen></iframe> 

這是我的查詢,但它似乎並沒有爲我工作:

UPDATE wp_postmeta SET `meta_value`=REPLACE(`meta_value`, 'http://www.youtube.com/watch?v=', '<iframe width="640" height="360" src="//www.youtube.com/embed/'),'"frameborder="0" allowfullscreen></iframe>'); 

錯誤:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''"frameborder="0" allowfullscreen></iframe>')' at line 1 

回答

0

,因爲你只是「FRAMEBORDER」前用右括號關閉REPLACE功能和傳遞4個變量時,只接受3參見REPLACE的文檔你得到這個錯誤。

UPDATE wp_postmeta 
SET `meta_value`= 
REPLACE(`meta_value`, 
     'http://www.youtube.com/watch?v=', 
     '<iframe width="640" height="360" src="//www.youtube.com/embed/'), 
     '"frameborder="0" allowfullscreen></iframe>' -- <- Invalid parameter 
); 

不幸的是,要做到你正在努力完成的任務,需要使用正則表達式。您可以使用mysql-udf-regex用戶定義的函數完成此操作,但是可能更簡單的解決方案是執行一個簡單的SELECT以獲取包含指向「youtube」的鏈接的meta_values,然後使用PHP中的正則表達式進行替換。

請記住,WordPress中的很多meta_values可能會被序列化,所以直接替換可能會破壞它們。使用get_post_meta()update_post_meta()可能會更好地爲您服務 - 速度並不快,但它確保在轉換過程中沒有任何中斷。

0

你的查詢有一些問題...你在REPLACE上有一個額外的參數,一個額外的paren ...看起來像你可能在正確的軌道上,但混合起來。

你需要使用CONCAT和REPLACE來得到你想要的。試試這個:

UPDATE wp_postmeta 
SET meta_value= 
    CONCAT(REPLACE(meta_value, 'http://www.youtube.com/watch?v=', '<iframe width="640" height="360" src="//www.youtube.com/embed/'), ' "frameborder="0" allowfullscreen></iframe>'); 

基本上,這個查詢用正確的字符串替換meta_value到SRC的結尾,然後串接必要的字符串的其餘部分到它,給你想要的結果。正如最後一個注意事項一樣,您可能需要考慮僅存儲嵌入代碼,即「ZHIhsLhQ-q8」部分......然後在從數據庫中檢索時使用該代碼。可以給你更多的自由來以各種不同的方式使用Youtube視頻......你可以像以前一樣將嵌入代碼插入到URL中,或者像你切換到的iframe一樣......只是一個念頭。