PHP str_ireplace 在 Mysql 结果上

标签 php mysql

我需要从 MySQL 表中获取一个值,然后将其替换为其他值。

我有一个查找和替换表,其中包含三列:ID、查找、替换。我想循环遍历该表的每一行,然后在另一个表中搜索查找值并将其更改为替换。

例如:

ID | Find                   | Replace
1  | This is a product name | Product Name 

我创建了一个循环来遍历每一行,然后在另一个循环内部循环遍历我要替换其中值的表:

$lookups = mysqli_query($connect, "SELECT * FROM value_lookup");

while($row = mysqli_fetch_assoc($lookups)) {
    $find = $row['Find'];
    $replace = $row['Replace'];

    $table = mysqli_query($connect, "SELECT ID, Reference FROM table");

    while($row = mysqli_fetch_assoc($table)) {
        $ref = $row['Reference'];
        $newRef = str_ireplace($find, $replace, $ref);

        echo $newRef . PHP_EOL;
        mysqli_query($connect, "UPDATE table SET Reference = '$newRef' WHERE Reference LIKE '%$find%'");
    }
}

在我看来,str_ireplace 不起作用,因为我使用的值是关联数组。如果我手动输入字符串形式的值,它就可以正常工作。

我需要知道如何获取字符串形式的值,或将它们转换为一。我也必须使用 str_ireplace,我不能直接获取查找值并更改为替换。由于某些值具有不同的前缀和后缀,我希望保持相同:

These are some towels: Red   TO   Towels: Red
These are some towels: Blue   TO   Towels: Blue

最佳答案

在为 mickmackusa 制作 SQLfiddle 时,我实际上已经成功地使用纯 SQL 为自己解决了这个问题。

DELIMITER //
CREATE PROCEDURE findreplace()
BEGIN   
DECLARE cnt INT DEFAULT 0;
DECLARE total INT DEFAULT 0;
DECLARE original VARCHAR(255);
DECLARE new VARCHAR(255);

SELECT COUNT(*) FROM lookup INTO total;

WHILE cnt < total DO
    SELECT find FROM lookup LIMIT cnt, 1 INTO original;
    SELECT repl FROM lookup LIMIT cnt, 1 INTO new;

    UPDATE test SET Reference = replace(Reference, original, new);
    SET cnt = cnt + 1;
END WHILE;
END//

关于PHP str_ireplace 在 Mysql 结果上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48866909/

相关文章:

php - jQuery Flot 与 PHP

php - For 循环的最后一次迭代,如果条件与 Twig

用于检查 alter mysql 数据库的 PHP 脚本

mysql - 当一个数据库的名称包含在另一个数据库中时连接两个数据库

mysql - CakePHP 3.x - 保存这些表的关联数据和表单输入

mysql - Liquibase 主键在 H2 上创建了两次

MYSQL - 对按名称分组的 sum(field) 的附加分析

PHP MYSQL 允许用户从文本区域提交链接

javascript - 单击 bootstrap 选项卡时运行 jquery 函数

mysql - MS 通过 ODBC Access MySQL 链接表 >> 有没有办法解密列