mysql内部的preg_replace不能在循环php之外打印[重复]

Posted

技术标签:

【中文标题】mysql内部的preg_replace不能在循环php之外打印[重复]【英文标题】:preg_replace inside mysql while cannot be printed outside the loop php [duplicate] 【发布时间】:2020-12-31 21:33:18 【问题描述】:

我正在尝试在生成的循环之外打印preg_replace 结果。

这是我的代码

$search = "Lola and Chris";
$query_gdpr_names = "select name FROM gdpr_names";
$result_gdpr_names = mysqli_query($connect, $query_gdpr_names);
            
while ($row_gdpr_names = mysqli_fetch_assoc($result_gdpr_names)) 
    $name = $row_gdpr_names['name'];
    $regex = "/\b" . $name . "\b/ui";
    $search = preg_replace($regex, 'removed', $search);

echo $search;

如果我尝试在循环内打印$search,它将按预期打印每次迭代。但是如果我尝试在循环之外打印它,它就会变成空的。

如果我尝试改用 str_replace,它会在外面正确打印

$search = str_replace($name, 'removed', $search);

任何想法我对 preg_replace 做错了什么?

【问题讨论】:

不确定是不是问题,但是如果名称中包含某些字符可能会导致问题,您可能希望在使用前对其进行转义 - ***.com/questions/1531456/… 严格来说,您应该永远从该循环中获得一个空的$search 字符串,因为它会用文本removed 替换匹配项。你应该检查你的结果集。例如,如果它将字母表中的每个字母都作为名称条目,那么您的替换逻辑将删除所有字母。您应该在调试模式下单步执行循环并检查。 无法重现(使用标准 ASCII 名称)~3v4l.org/i1VO7 我怀疑您的实际代码在您的一个变量名中的某处有错字。确保您可以看到任何和所有错误。 How can I get useful error messages in php? @NigelRen,你是绝对正确的......数据库中有一条记录包含一个斜线。谢谢! 【参考方案1】:

所以问题似乎在于其中一条记录带有斜线。删除斜线解决了问题。

已根据 @NigelRen 评论修复。 所有功劳归于他!

【讨论】:

以上是关于mysql内部的preg_replace不能在循环php之外打印[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥外部for循环变量不能用于内部for循环

Mysql算法内部算法 - 嵌套循环连接算法

preg_replace 仅在文本上而不是在 href 中

注意forEach不能使用return跳出循环

php preg_replace遇到替换本身有括号的内容怎么办

For循环不能在mysql php中使用数组