본문 바로가기
MySql

MySQL 데이터베이스에서 htmlentities () 값을 제거하는 방법은 무엇입니까?

by 베이스 공부 2020. 11. 24.
반응형

내가 아무것도 알기 훨씬 전에-지금도 많이 아는 것은 아니지만- htmlentities () 를 통해 값을 실행 한 후 mysql 데이터베이스에 데이터를 삽입하는 PHP 웹 앱을 설계했습니다. 나는 결국 제 감각을 습득하고이 단계를 제거하고 입력이 아닌 출력에 붙인 다음 즐거운 길을갔습니다.

그러나 그 이후 로이 오래된 데이터 중 일부를 다시 방문해야했으며 불행히도 화면에 표시 될 때 효과적으로 두 번 입력 된 값이 표시되는 문제가 있습니다.

따라서 이전에 영향을받은 모든 행을 관련 문자로 다시 변경하는 mysql 또는 phpmyadmin 방법이 있습니까? 아니면 각 행을 읽고 12 개 테이블의 모든 1,700 만 행을 디코딩 및 업데이트하는 스크립트를 작성해야합니까?

편집하다:

모두에게 도움을 주셔서 감사합니다. 코드를 입력하여 아래에 내 자신의 답변을 작성했습니다. 예쁘지는 않지만 이전에 테스트 데이터에서 작동했기 때문에 누군가가 침대에있는 동안 내 코드에서 눈에 띄는 오류를 지적하는 것을 제외하고는 내일 백업 DB에서 실행하고 괜찮다면 라이브 DB에서 실행합니다.

 

해결 방법

 

나는 이것을 사용하게되었고, 예쁘지 않았지만 피곤했다. 오전 2시이고 그 일을했다! (편집 : 테스트 데이터에서)

$tables = array('users', 'users_more', 'users_extra', 'forum_posts', 'posts_edits', 'forum_threads', 'orders', 'product_comments', 'products', 'favourites', 'blocked', 'notes');
foreach($tables as $table)
    {       
        $sql = "SELECT * FROM {$table} WHERE data_date_ts < '{$encode_cutoff}'";
        $rows = $database->query($sql);
        while($row = mysql_fetch_assoc($rows))
            {
                $new = array();
                foreach($row as $key => $data)
                    {
                        $new[$key] = $database->escape_value(html_entity_decode($data, ENT_QUOTES, 'UTF-8'));
                    }
                array_shift($new);
                $new_string = "";
                $i = 0;
                foreach($new as $new_key => $new_data)
                    {
                        if($i > 0) { $new_string.= ", "; }
                        $new_string.= $new_key . "='" . $new_data . "'";
                        $i++;
                    }
                $sql = "UPDATE {$table} SET " . $new_string . " WHERE id='" . $row['id'] . "'";
                $database->query($sql);
                // plus some code to check that all out
            }
    }

 

참조 페이지 https://stackoverflow.com/questions/2838245

 

 

반응형

댓글