query - php와 mysql




phpmyadmin에서 필드를 열면 mySQL 데이터베이스가 변경되지만 아무 것도 변경하지 않습니다. (2)

문제는 해당 데이터베이스 항목에 "콜론 묶음이 포함 된 텍스트"만있는 것이 아니라 PHP serialized 데이터입니다. 사실, 그것은 텍스트이지만 이진 정렬로 간주되어야합니다. 직렬화 된 데이터를 임의로 변경 (예 : 단어를 더 길거나 더 짧은 단어로 변경)하면 데이터 구조가 손상됩니다. 관련 코드가 나중에 데이터를 deserialize하려고하면 실패합니다. 도덕적 : 직렬화 된 데이터를 부주의하게 편집하지 마십시오. 그렇지 않으면 작업이 중단됩니다.

PHP serialized 에서 인용하기 : 직렬화 된 문자열은 TEXT 필드에 저장되어서는 안됩니다.

이것은 null 바이트를 포함 할 수있는 이진 문자열이므로 저장 및 처리해야합니다. 예를 들어, serialize () 출력은 일반적으로 CHAR 또는 TEXT 필드 대신 데이터베이스의 BLOB 필드에 저장되어야합니다.

어쨌든 직렬화 된 값의 규칙을 준수하거나 해당 구조 정보를 조정하면 PHP 직렬화 된 데이터를 편집 할 수있는 방법이 있습니다. 거기에 대한 일부 전문 editors 또는 온라인 tools (나는 그들을 테스트하지 않은)입니다.
직렬화 된 데이터의 구조에 대해 더 자세히 알고 싶으면 serialize () 된 값의 해부 구조를 설명하는 php.net의 링크 된 serialized 에서 egingell의 상위 주석을 확인하십시오.

문자열 -> s : 크기 : 값;

정수 -> i : 값;

부울 -> b : 값; ( "true"또는 "false"를 저장하지 않고 '1'또는 '0'을 저장합니다)

Null -> N;

배열 -> a : 크기 : {키 정의, 값 정의, (요소 당 반복)}

객체 -> O : strlen (객체 이름) : 객체 이름 : 객체 크기 : {s : strlen (속성 이름) : 속성 이름 : 속성 정의; (속성마다 반복)}

문자열 값은 항상 큰 따옴표로 묶습니다.
배열 키는 항상 정수 또는 문자열입니다.
"null => 'value'"는 's : 0 : ""; s : 5 : "value";'와 같습니다.
"true => 'value'"는 'i : 1; s : 5 : "value";'와 같습니다.
"false => 'value'"는 'i : 0; s : 5 : "value";'와 같습니다.
"배열 (내용이 무엇이든) => 'value'"는 배열을 키로 사용할 수 없기 때문에 "잘못된 오프셋 유형"경고와 같습니다.
그러나 배열을 키로 사용하는 변수를 사용하면 's : 5 : Array "; s : 5 :"value ";'와 같을 것이고 객체를 키로 사용하면 배열을 사용할 때와 같은 동작을합니다.

WordPress 사이트와 데모 데이터가 설치된 템플릿이 있습니다. phpmyadmin에서 일부 필드를 열면 아무런 변경도하지 않고 다른 필드를 선택하더라도 필드에 대한 업데이트가 수행됩니다. 아무런 문제가 없지만 아무것도 업데이트하지 않습니다. 제로 변경을했기 때문입니다. 그런 다음 WordPress 사이트의 프런트 엔드가 헤이 와이어로 전환됩니다. 단순히 검토중인 필드에서 뭔가가 변경 되었기 때문입니다. 문제의 필드에는 HTML 코드가 많이 포함되어 있습니다. 및 "그것에있는 특성 ...

필드를 열고 닫으면 업데이트 명령이 필드의 내용을 파싱 한 것으로 보입니다. 그리고 "모든 곳에서 ... 내가 틀릴 수도 있습니다. 어쨌든 데이터를보고 그것을 mysql 셸 쿼리 또는 phpmyadmin으로 복사 한 후 정확히 그것을 이전과 같이 DB로 다시 업데이트 할 때 상황이 바뀌고 있습니다 ,하지만 심지어 메모장을 사용하여 + + 플러그인을 비교하고 내가 할 수있는 모든 방법으로 데이터를보고, 거기에 아무 변화가 ...

이게 말이 되니? 그것은 나를 미치게한다!

이것은 누군가가 친숙한 경우를 대비하여 갠트리 프레임 워크와 함께 로켓 테마를 사용하는 WordPress 사이트입니다 ...

다음은이 문제에 대한 비디오 데모입니다.

https://www.youtube.com/watch?v=ljXTDKKmUUw

좋아, 대답은, 그 데이터가 필드 내부의 배열에 직렬화되어 저장되어 있다면, php로 먼저 직렬화되어 읽혀지고 php로 다시 직렬화되어야한다는 것입니다.

분명히 이것은 워드 프레스의 일반적인 문제이며 사람들이 URL 길이를 변경하는 데이터베이스 마이그레이션을 시도 할 때 좌절감을 안겨줍니다.

이 문제에 대한 자세한 내용은 http://wpgarage.com/tips/data-portability-and-data-serialization-in-wordpress/ 에서 자세히 배웠습니다 http://wpgarage.com/tips/data-portability-and-data-serialization-in-wordpress/


비디오의 외형에서 꽤 오래된 PMA 버전을 사용하고있는 것처럼 보입니다. 특정 버전에 문제가 있는지 PMA, PHP 및 MySQL을 업데이트하기 시작할 것입니다.







phpmyadmin