将wordpress项目设置为其临时环境,我遇到了一个关于为开发环境设置的路径的问题,并且不适合进行分段。
所以我需要更新数据库中的路径,从C:\xampp\htdocs\site.com
到/var/www/site.com
起初,我尝试更换,就像我更换网址一样:
update `wp_slider` set `url` = replace(`url`, 'http://local.', 'http://');
然后路径:
update `wp_slider` set `path` = replace(`path`, 'C:\xampp\htdocs\site.com', '/var/www/site.com');
哪个实际上不起作用。然后我尝试了SELECT
来查看我可以检索哪些行:
SELECT * FROM `wp_slider` WHERE `path` LIKE "%C:\xampp\htdocs\site.com%"
哪个会返回一个空结果。我错过了什么?
忘记提及,我尝试通过\
转义\\
并且仍然没有结果
我正在尝试替换的完整路径如下:C:\xampp\htdocs\site.com/wp-content/plugins/slider/skins/slider\circle\circle.css
答案 0 :(得分:1)
您需要转义反斜杠:\\
答案 1 :(得分:1)
这大致是要走的路:
mysql> SELECT REPLACE('C:\\xampp\\htdocs\\site.com\\foo\\bar.txt', 'C:\\xampp\\htdocs\\site.com', '/var/www/site.com');
+----------------------------------------------------------------------------------------------------------+
| REPLACE('C:\\xampp\\htdocs\\site.com\\foo\\bar.txt', 'C:\\xampp\\htdocs\\site.com', '/var/www/site.com') |
+----------------------------------------------------------------------------------------------------------+
| /var/www/site.com\foo\bar.txt |
+----------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
如果您获得零匹配,那是因为您的数据库记录不包含您认为他们所做的事情。确保没有空格或控制字符。如果您的MySQL客户端不容易发现这些事情,您可以随时使用HEX()
:
SELECT path, HEX(path)
FROM wp_slider
WHERE path NOT LIKE "C:\\xampp\\htdocs\\site.com%"
此外,我不完全确定您可以在Unix系统中使用\
作为路径分隔符。我建议你也替换它:
UPDATE wp_slider
SET path = replace(path, '\\', '/')
WHERE path IS NOT NULL
<强>更新强>
我想解释的是你的程序基本上是正确的(除了转义\
并不总是可选的):
mysql> CREATE TABLE wp_slider(
-> path VARCHAR(2083)
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> INSERT INTO wp_slider (path) VALUES ('C:\\xampp\\htdocs\\site.com/wp-content/plugins/slider/skins/slider\\circle\\circle.cs
s');
Query OK, 1 row affected (0.04 sec)
mysql> UPDATE wp_slider SET path=REPLACE(path, 'C:\\xampp\\htdocs\\site.com', '/var/www/site.com');
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM wp_slider;
+----------------------------------------------------------------------------+
| path |
+----------------------------------------------------------------------------+
| /var/www/site.com/wp-content/plugins/slider/skins/slider\circle\circle.css |
+----------------------------------------------------------------------------+
1 row in set (0.00 sec)
如果您没有获得匹配,那是因为您的数据库包含的数据与您想象的不同,例如(但不限于)空格或控制字符:
mysql> TRUNCATE TABLE wp_slider;
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO wp_slider (path) VALUES ('C:\xampp\htdocs\site.com/wp-content/plugins/slider/skins/slider\circle\circle.css');
Query OK, 1 row affected (0.02 sec)
mysql> UPDATE wp_slider SET path=REPLACE(path, 'C:\\xampp\\htdocs\\site.com', '/var/www/site.com');
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> SELECT * FROM wp_slider;
+------------------------------------------------------------------------------+
| path |
+------------------------------------------------------------------------------+
| C:xampphtdocssite.com/wp-content/plugins/slider/skins/slidercirclecircle.css |
+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
在最后一个示例中,我们忘记在插入时逃离\
,因此我们在替换时没有得到匹配,因为输入数据不是我们认为的那样