regexp mysql update_如何在MySQL中使用Regexp替换命令?

我的目标是用一个catchall链接替换数据库中的链接.我通常使用REPLACE命令替换数据库中的字符串,但这次我遇到了困难,因为为了找到我需要使用正则表达式的链接,这根本就没有用完:

UPDATE node_revisions SET body = REPLACE ( `body`,'http://.*.\pdf','/migration-update' );

UPDATE node_revisions SET teaser = REPLACE ( `teaser`,'http://.*pdf','/migration-update' );

这两个问题只是平淡无奇.

在这种情况下需要做些什么?

最佳答案

正如其他人已经提到的那样,你不能在MysqL中做到这一点.但是,这似乎是你需要做的一次性操作,所以我写了一个快速而肮脏的小PHP脚本来完成这项工作.它假定您的node_revisions表具有名为“id”的主键列.如果没有,请适当编辑.另外,不要忘记更改脚本顶部的数据库主机,用户名,密码和数据库名称以匹配您的配置.

PHP

$host = '127.0.0.1';

$username = 'root';

$password = 'password';

$database = 'test';

$conn = MysqL_connect($host,$username,$password);

if (!$conn) {

echo "Unable to connect to DB: " . MysqL_error();

exit;

}

if (!MysqL_select_db($database)) {

echo "Unable to select " . $database . ": " . MysqL_error();

exit;

}

$sql = "SELECT * FROM node_revisions";

$result = MysqL_query($sql);

if (!$result) {

echo "Could not successfully run query ($sql) from DB: " . MysqL_error();

exit;

}

if (MysqL_num_rows($result) == 0) {

echo "No rows found,nothing to print so am exiting";

exit;

}

while ($row = MysqL_fetch_assoc($result)) {

$id = $row['id'];

$body = $row['body'];

$teaser = $row['teaser'];

$body = preg_replace('/http:\/\/.*?\.pdf/','/migration-update',$body);

$teaser = preg_replace('/http:\/\/.*?\.pdf/',$teaser);

$sql = "UPDATE node_revisions set body='" . MysqL_real_escape_string($body) . "',teaser='" . MysqL_real_escape_string($teaser) . "' where id=" . $id;

MysqL_query($sql);

}

MysqL_free_result($result);

MysqL_close($conn);

?>

另请注意,我在正则表达式上使用了非贪婪的修饰符,这样如果您在正文或预告字段中有多个pdf网址,则不会丢失它们之间的所有内容.

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

你可能感兴趣的:(regexp,mysql,update)