2011-04-06 4 views
1

아무도이 PHP 코드가 두 값을 바꾸는 것을 막을 수있는 방법을 말해 줄 수 있습니까? 위의 코드를 사용하여같은 필드에서 두 값을 바꾸지 못하도록하려면?

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

그냥 "/page.html를 떠나, 두 URL을 제거합니다

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

는 예를 들어, 필드"URL은 "이 포함 ".
어떻게 값을 삭제하는지 확인하고 다른 것은 제거하지 않습니다.

+0

그냥 약간의 발언! PHP = SQL 및 PHP는 여기 이럴 완전히 무관하다. PHP 문자열 안에 SQL을 포함 시키면 상황을보기가 더 어려워집니다. –

+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' 

I 필드가 실제로 다음과 같은 일을 할 수있는 두 URL을 사이에 줄 바꿈이 포함 된 경우 사용자의 특정 요구 사항

+0

텍스트 필드를 사용하고 있기 때문에 작동하지 않습니다. 동일한 필드에있는 모든 URL을 포함합니다. 따라서 urls = ''로 설정하면 모든 URL이 제거됩니다. 그래도 답장을 보내 주셔서 감사합니다! :) –

0

위해 뭔가를 해결할 수 확신

RECO를 들어

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

단 하나 개의 URL과 RDS, 당신은 WHERE 절에 그것을 할 수 :

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

우우, 고마워! 한 가지 문제 - 어떻게하면 그 뒤에 줄이없는 경우 필드 끝에 URL을 제거 할 수 있습니까? –

+0

"\ r \ nhttp : // someurl.com", 즉 선행 줄 바꿈도 확인할 수 있다고 가정합니다. – Widor

1

죄송합니다 ... @jamesKG - 가정 joeys 예제 코드가 아무것도 @Widor를 업데이트하지 않을 것이다 -이 매우 고집 만 대체 할 URL이 첫 번째 줄에 있으면 작동합니다.

기본적으로 조이 (Joey)는 한 필드에서 여러 값을 보유하는 것은 권장되지 않습니다. 이제까지 당신 자신을 알게되었습니다 :-) 무엇이든지, 기존 데이터 구조가 URL 콘텐트를 먼저 얻는 것이 더 낫다고 가정하고, PHP에서 원하는 방식으로 바꾸고 결과를 urls로 업데이트하십시오. 이것은 데이터베이스 기능을 사용하는 팬이긴하지만 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 겐슨 -

관련 문제