Используйте функцию в операторе обновления MySql - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь использовать этот оператор mysql в файле cron. php для обновления одной БД из другой.

Мне нужно удалить все специальные символы в одном колонка, чтобы сохранить его в моей первой БД. Я определил функцию, в которой он отвечает за удаление всех из них, но когда я пытаюсь запустить его в данных моего столбца, он просто не работает должным образом.

Я использую следующий код:

//função para retirada de acentos
function tirarAcentos($string){
   $acentos  =  'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ ';
   $sem_acentos  =  'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr-';
   $string = strtr($string, utf8_decode($acentos), $sem_acentos);
   //$string = str_replace(" ","-",$string);
   return utf8_decode($string);
}

// Executa o UPDATE de Cidades
 $sql = "UPDATE imo_imo2019.categoria categoria
        INNER JOIN imo_nido.i_cidade i_cidade
        ON categoria.categoria_id = i_cidade.codcidade
        SET categoria.categoria_title = i_cidade.descricao, categoria.categoria_url = tirarAcentos(i_cidade.descricao)";  

Код работает нормально. Он обновляет данные, как и ожидалось, но не удаляет символы.

Мне бы очень понравилось, если бы некоторые из вас, ребята, могли бы помочь мне решить эту проблему.

Спасибо

Ответы [ 2 ]

1 голос
/ 28 марта 2020

Запрос SQL выполняется на сервере базы данных, а не в PHP. Вы используете PHP для генерации текста, представляющего запрос, а затем запрашиваете базу данных выполнить его. В вашем случае у вас есть две опции:

  1. Два отдельных запроса: сначала запрос SELECT для получения существующих данных, затем новый запрос UPDATE для каждой строки с отформатированным значением.
  2. Напишите хранимую процедуру (функция на сервере базы данных), которая делает то, что вам нужно.
0 голосов
/ 28 марта 2020

Существует два решения:

  • Перевести вашу функцию в хранимую процедуру в базе данных.
  • получить данные из БД в PHP, применить вашу функцию и обновить БД с измененными значениями.
...