반응형
내가 아무것도 알기 훨씬 전에-지금도 많이 아는 것은 아니지만- 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
반응형
'MySql' 카테고리의 다른 글
MySQL SQL 코드를 다이어그램으로 변환하는 도구 (0) | 2020.11.24 |
---|---|
MySQL 장고 모델의 큰 정수 필드 (0) | 2020.11.24 |
MySQL 마지막으로 실행 된 mysql 쿼리의 효과를 롤백하는 방법 (0) | 2020.11.24 |
MySQL Symfony 쿼리 오류 : 예상 리터럴, ' "'있음 (0) | 2020.11.24 |
MySQL Workbench를 Amazon RDS에 연결하는 방법은 무엇입니까? (0) | 2020.11.24 |
댓글