我有2000个带有使用序列化数据的行的产品,我需要更新特定的字符串
这是行名数据
a:35:{s:11:"expire_days";s:3:"30d";s:12:"trial1_price";s:0:"";s:11:"trial1_days";s:0:"";s:12:"is_recurring";s:0:"";s:10:"start_date";s:0:"";s:5:"terms";s:24:"$150 for 1 Per license";s:12:"rebill_times";s:0:"";s:15:"paypal_currency";s:0:"";s:4:"##11";N;s:3:"url";s:0:"";s:8:"add_urls";s:0:"";s:4:"##12";N;s:5:"scope";s:0:"";s:5:"order";s:4:"1010";s:11:"price_group";s:1:"7";s:13:"renewal_group";s:2:"28";s:14:"need_agreement";s:0:"";s:13:"require_other";a:1:{i:0;s:0:"";}s:16:"prevent_if_other";N;s:4:"##13";N;s:19:"autoresponder_renew";s:0:"";s:16:"dont_mail_expire";s:0:"";s:13:"joomla_access";s:2:"36";s:10:"files_path";s:108:"products/Boxes8.zip|Box 8
products/Boxes9.zip|Box 9";s:14:"download_count";s:0:"";s:18:"download_unlimited";}
我唯一需要改变的是 s:24:" 每张许可1美元150美元";
感谢任何帮助。
答案 0 :(得分:1)
您应该SELECT
行,进行更改,然后使用新值UPDATE
。如果您需要执行此数据库端,此问题的答案可能会有所帮助。
答案 1 :(得分:0)
如果您想用其他内容替换该单个字段的值,可以使用以下查询:
UPDATE table SET col = CONCAT(
LEFT(col, LOCATE('s:24:"', col) + 5), -- up to and including the opening quote
'Now for free', -- new replacement text
SUBSTR(col, LOCATE('"', col, LOCATE('s:24:"', col)+6)) -- closing quote and everything after that
) WHERE col LIKE '%s:24:"$150 for 1 Per license"%'
请注意,可能存在问题:如果您的某个字段的值应以's:24:'
结尾,那么与结束引号相结合的内容会被错误解释为您正在查看的位置。我认为这种风险不太可能,但是如果你想安全地玩它,你可能想用一个精心设计的正则表达式检查它,它可以处理引用的字符串和转义的引号。