2011-04-06 40 views
1

誰能告訴我如何防止這個PHP代碼替換兩個值?如何防止在同一字段中替換兩個值?

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

例如,字段 「網址」 包含此:

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

使用上述代碼刪除這兩個URL,只留下「/page.html 」。
如何確保它只刪除該值並且不會刪除其他任何內容。

+0

只是有點評論:PHP!= SQL和PHP在這裏完全不相干恕我直言。將你的SQL嵌入到PHP字符串中只會讓事情變得更難以看清。 – 2011-04-06 16:21:33

+0

是的,你說得對。對於那個很抱歉。 – 2011-04-06 16:25:55

回答

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' 

我敢肯定,你可以算出來的東西您的具體要求

+0

因爲我正在使用文本字段,所以不起作用。它包含同一字段中的所有網址。所以如果我設置urls =''它會刪除所有的URL。感謝您的回覆! :) – 2011-04-06 16:18:40

0

如果該字段實際上包含兩個網址之間的斷行,那麼你可以這樣做

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

For reco只有一個URL RDS,你可以做一個WHERE條款:

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

噢,謝謝!但是有一個問題 - 如果它後面沒有一行,我怎麼能在字段末尾刪除一個URL? – 2011-04-06 16:27:17

+0

我想你也可以檢查''\ r \ nhttp:// someurl.com'',即前面的換行符? – Widor 2011-04-06 17:09:22

1

對不起,...... @jamesKG - 假設joeys例如您的代碼會更新什麼, @Widor - 這是非常特別的,只作品,如果要更換的網址在第一行。

喬伊,基本上沒有推薦的做法,在一個領域持有多個值......不需要說。現在你知道自己:-) 無論如何,假設你現有的數據結構更好地獲得了url的內容,在PHP中用你喜歡的方式替換它,然後用你的結果更新url。這應該比SQL更容易,儘管我很喜歡使用數據庫功能。 使用PHP,您可以通過「\ r \ n」將URL分解爲單個項目並單獨處理每個項目。

不要擔心額外的數據庫訪問(如果有用戶名索引)。

0

將「限制」添加到更新子句中。

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

如果您有更新可以更新多個記錄,但只希望修改一條記錄,請使用此選項。

我使用ORDER BY作爲安全網,以便您可以預測在您嘗試調試數據或代碼時將更新哪條記錄。

注意:這類問題通常是一種弱架構的症狀,您的數據不夠標準化或您的主鍵未被充分定義。理想情況下,在where子句中使用主鍵將允許您爲更新指定單個記錄。

-J Jorgenson -

相關問題