2010-07-19 2 views
4

내가 읽은 모든 것은 MySQL에 직렬화 된 배열을 저장하는 것이 나쁜 생각이다 - 이미 알고있다.) 불행히도이 방법을 사용하는 오픈 소스 스크립트로 작업하고있다. 이 시나리오에서는 구조를 변경하는 것이 옵션이 아닙니다.serialize 된 배열을 mysql에서 업데이트하기 (unserialising하지 않고)

먼저이 URL을 업데이트하지 않고 업데이트 할 수 있습니까? 내가 원래 대체 사용하여 시도

그러나 그것은 오류가 발생합니다 :

$rssquery = "UPDATE config SET `array` = replace(`array`, \"http://www.oldurl.com\", \"http://www.newurl.com\") WHERE name='config'"; 
    $insert = $db->insert($rssquery); 

Could not update UPDATE config SET array = replace('array', ' http://www.oldurl.com ', ' http://www.newurl.com ') as variable supplied must be an array.

테이블 이름 : 설정
열 : 이름 | 배열
행의 이름 업데이트 필요 : 설정
셀의 이름 업데이트 필요 : 배열

다른 아이디어 나 방법 주시면 감사하겠습니다 :) 감사합니다!

+1

왜'array'가 따옴표로 묶여 있는가? ? – casablanca

+0

array는 셀 이름이며 따옴표로 묶어야한다고 가정합니다. – Ryan

+0

Backticks'(\')'는 따옴표'(')'와 다릅니다. – quantumSoup

답변

10

간단히 검색하고 바꾸면 직렬화 된 데이터를 사용할 수 없게됩니다. 여기에 당신이해야 할 작업은 다음과 같습니다

$old = 'http://www.google.com'; 
$new = 'http://www.someplace.com'; 

$search = 's:' . strlen($old) .':"' . $old . '"'; 
$replace = 's:' . strlen($new) .':"' . $new . '"'; 

$query = "UPDATE config SET array=REPLACE(array, '{$search}', '{$replace}');"; 

, 현재 및 대상 URL의와 $old$new를 교체 스크립트를 실행하고 생성 $query을 실행합니다. 이것이 당신의 직렬화 된 배열에 검색 문자열의 모든 경우를 대체 할 것으로

SET @search := 'http://www.original.com'; 
SET @replace := 'http://www.target.com'; 
UPDATE config SET array=REPLACE(array, CONCAT('s:', LENGTH(@search), ':"', @search, '"'), CONCAT('s:', LENGTH(@replace), ':"', @replace, '"')); 

참고 :

여기에 순수한 SQL 솔루션입니다. 특정 키를 대체하려는 경우 더 구체적이어야합니다.

+0

좋은 일을 많이했습니다 :) – Ryan

1

생각 나는 데이터베이스 검색을 수행하고 다운로드 할 수있는 PHP (스크립트)로 작성된 도구를 공유합니다. 사이트에서 저자의 말을 인용 : 나는 다른 도메인에 워드 프레스 전자 상거래 및 기타 데이터베이스를 이동 한 Database Search and Replace Script in PHP

을하고 나는 그것이 귀중한 발견

Search Replace DB version 3.0.0 (currently a BETA version) allows you to carry out database wide search/replace actions that don’t damage PHP serialized strings or objects with a user friendly interface and experience.

을 여기에서 찾을 수 있습니다. 나는 PHP 스크립트 자체를 살펴 보지 않았지만, 코드를 obfusic하지 않았다면, 아이디어와 메소드의 금광을 발견 할 수있다. lol

관련 문제