在 MySql 更新语句中使用函数

Posted

技术标签:

【中文标题】在 MySql 更新语句中使用函数【英文标题】:Use a Function in MySql update statement 【发布时间】:2020-07-09 09:38:32 【问题描述】:

我正在尝试在 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 代码重写为 MySQL 函数。 我在 PHP 页面中使用它。我应该改变它吗? 我看不到你在哪里调用 sql 【参考方案1】:

SQL 查询在数据库服务器中运行,而不是在 PHP 中。您使用 PHP 生成表示查询的文本,然后要求数据库运行它。在您的情况下,您有两种选择:

    两个单独的查询,首先是一个 SELECT 查询来获取现有数据,然后是一个新的 UPDATE 查询,对 每个 行使用格式化的值。 写一个stored procedure(数据库服务器中的一个函数)来满足你的需要。

【讨论】:

【参考方案2】:

有两种解决方案:

将您的函数转换为数据库中的存储过程。 将数据从 DB 获取到 PHP,应用您的函数,并使用更改后的值更新 DB。

【讨论】:

以上是关于在 MySql 更新语句中使用函数的主要内容,如果未能解决你的问题,请参考以下文章

MySql 错误:无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用

mysql中的if语句?

php MySQL使用rand函数随机取记录(转)

mysql 如何更新数组中的值

MySQL:在自己的触发器中更新表

使用 CodeIgniter Active Record 函数将子句添加到不带引号的 MySQL 语句