php - 在 MySql 更新语句中使用函数
问题描述
我试图在cron.php文件中使用这个 mysql 语句来从另一个数据库更新一个数据库。
我需要删除一列中的所有特殊字符以将其保存在我的第一个数据库中。我已经定义了一个函数,它负责删除所有这些函数,但是当我尝试在我的列数据中运行它时,它无法按预期工作。
我正在使用以下代码:
//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)";
代码工作正常。它按预期更新数据,但不删除字符。
如果你们中的一些人可以帮助我解决它,我真的很高兴。
谢谢
解决方案
SQL 查询在数据库服务器中运行,而不是在 PHP 中。您使用 PHP 生成表示查询的文本,然后要求数据库运行它。在您的情况下,您有两种选择:
- 两个单独的查询,首先是一个 SELECT 查询来获取现有数据,然后是一个新的 UPDATE 查询,每个行都有格式化的值。
- 编写一个存储过程(数据库服务器中的一个函数)来满足您的需要。
推荐阅读
- python - 将列表元素与字典值匹配
- bash - shell脚本中的“for i”和“for i in 1 2 3 4”有什么区别?
- objective-c - Property cannot be marked @objc because its type cannot be represented in Objective-C
- javascript - Angular 5:“AppModule”未找到 NgModule 元数据中的错误
- javascript - Jest 测试失败
- java - 我可以将“str”.equals(obj) 与 toString 实现一起使用吗?
- php - PHP中图像中的随机线生成
- c# - 具有相同参数子集的参数集的 Powershell C# cmdlet
- python - 从 Python 打印 Powerpoint 幻灯片
- json - 在 python 中创建一个没有 Flask 的 REST API