Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP str_i替换Mysql结果_Php_Mysql - Fatal编程技术网

PHP str_i替换Mysql结果

PHP str_i替换Mysql结果,php,mysql,Php,Mysql,我需要从MySQL表中获取一个值,然后用其他内容替换它 我有一个查找和替换表,它有三列:ID、Find、Replace。我想循环遍历该表的每一行,然后在另一个表中搜索find值并将其更改为replace 例如: ID | Find | Replace 1 | This is a product name | Product Name 我创建了一个循环来遍历每一行,然后在另一行中遍历我正在替换的表中的值: $lookups = mysqli_query($

我需要从MySQL表中获取一个值,然后用其他内容替换它

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

例如:

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不起作用,因为我使用的值是一个关联数组。如果我以字符串的形式手动键入这些值,效果会很好

我需要知道如何获取字符串形式的值,或者将其转换为字符串。我也必须使用stru_ireplace,我不能直接获取find值并更改为replace。由于某些值具有不同的前缀和后缀,我希望保持不变:

这些是一些毛巾:红色的 这些是一些毛巾:蓝色


在为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//

您可以通过使用单个更新查询来实现这一点。您可以在WHERE子句中为各自的查找和替换使用REGEXP或LIKE运算符,以下是查询:

使用:


希望它能帮助您。

您能为我们设置一个最小的、可验证的SQLFIDLE吗?也许这可以用纯mysql实现,但我还没有完全考虑清楚。“在我看来,str_ireplace不起作用,因为我使用的值是一个关联数组。”-它们不是$find=$row['find']-仅仅因为您从关联数组中选择了分配给$find的值,并不意味着$find本身也是一个值。进行一些基本的调试,并使用var_dump找出您当时传递给函数的这三个变量到底包含什么。为什么要使用loop,而您可以通过单个查询来实现这一点。。。
UPDATE table, findreplacetable SET table.name = REPLACE(table.name, findreplacetable.find_, findreplacetable.replace_) WHERE table.name REGEXP CONCAT('[[:<:]]', findreplacetable.find_,'[[:>:]]');
UPDATE table, findreplacetable SET table.name = REPLACE(table.name, findreplacetable.find_, findreplacetable.replace_) WHERE table.name LIKE CONCAT('%', findreplacetable.find_,'%');