如何防止在同一个字段中替换两个值?

时间:2011-04-06 16:09:48

标签: php mysql

有谁能告诉我如何防止这个PHP代码替换两个值?

$sql2="UPDATE users SET urls = replace(urls, 'http://someurl.com', '') WHERE uname='$username'";
$result2=mysql_query($sql2);

例如,字段“urls”包含:

  

http://someurl.com
  http://someurl.com/page.html

使用上面的代码会移除这两个网址,只留下“/page.html” 我如何确保它只删除值,不删除任何其他内容。

4 个答案:

答案 0 :(得分:1)

您好 为什么不在where子句中全部完成呢?

UPDATE users SET urls='' where urls='http://someurl.com' and uname='$username'

或者

UPDATE users SET urls='' where urls not like '%.html' and uname='$username'

我相信你可以根据自己的具体要求制定出一些东西

答案 1 :(得分:1)

抱歉,...... @jamesKG - 假设joeys示例你的代码什么都不会更新, @Widor - 这是非常特别的,只有在要替换的url位于第一行时才有效。

乔伊,基本上不建议在一个领域持有多个值......不必说。现在你知道了自己:-) 无论如何,假设您现有的数据结构更好地首先获取网址内容,请在PHP中以您喜欢的方式替换它,然后使用您的结果更新网址。这应该比SQL容易得多,尽管我是使用数据库功能的粉丝。 使用PHP,您可以将“\ r \ n”的网址分成单个项目并单独处理每个项目。

不要担心额外的数据库访问(如果有用户名的索引)。

答案 2 :(得分:0)

如果该字段实际上包含这两个网址之间的换行符,那么您可以执行类似

的操作

$sql2="UPDATE users SET urls = replace(urls, 'http://someurl.com\r\n', '') WHERE uname='$username'";

对于只有一个网址的记录,您可以在WHERE子句中执行此操作:

WHERE urls='http://someurl.com' and uname='$username'

答案 3 :(得分:0)

为您的更新子句添加“限制”。

UPDATE tbl
   SET urls = replace(urls, 'http://someurl.com', '')  
 WHERE uname = $username 
 ORDER BY uname, urls 
 LIMIT n

如果您有可以更新多条记录的更新,但只需要修改一条记录,请使用此选项。

我使用ORDER BY作为安全网,以便您可以预测在尝试调试数据或代码时将更新哪条记录。

注意:此类问题通常是架构较弱的症状,即您的数据未正常规范或主键未充分定义。理想情况下,在where子句中使用主键将允许您为更新指定单个记录。

- J Jorgenson -