PHP str_i替换Mysql结果
我需要从MySQL表中获取一个值,然后用其他内容替换它 我有一个查找和替换表,它有三列:ID、Find、Replace。我想循环遍历该表的每一行,然后在另一个表中搜索find值并将其更改为replace 例如: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($
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_,'%');