3 回答
TA贡献1831条经验 获得超10个赞
在每个匹配的循环中preg_replace,我建议您使用str_replace:
if(preg_match_all("/\{\{[^{}]+\}\}/", $lclString, $matches)) {
$NewValue = $String;
foreach ($matches[0] as $match) {
$Count++;
$Query = "SELECT link FROM student WHERE linkVal = '".$match."'";
$Result = $con->query($Query);
if($row = $Result->fetch(PDO::FETCH_ASSOC)) {
$NewValue = str_replace($match, $row["link"], $NewValue);
// ^^^^^^^^^^^^^^^^^^
}
}
echo json_encode($NewValue);
}
TA贡献1816条经验 获得超6个赞
您可以通过在一个查询中获取所有替换值来极大地简化代码:
$String = "{{ONE}} {{TWO}} {{THREE}} {{FOUR}} {{FIVE}} {{SIX}}";
if(preg_match_all("/\{\{[^{}]+\}\}/", $String, $matches)) {
$Query = "SELECT linkVal, link FROM student WHERE linkVal IN('".implode("','", $matches[0])."')";
$Result = $con->query($Query);
if ($rows = $Result->fetchAll(PDO::FETCH_ASSOC)) {
$NewValue = str_replace(array_column($rows, 'linkVal'), array_column($rows, 'link'), $String);
}
echo json_encode($NewValue);
}
TA贡献1779条经验 获得超6个赞
您的代码存在一些问题,您需要确保 中的变量preg_match_all()是您尝试搜索的字符串。
但主要问题在于更换部件。您需要替换当前匹配值 ( $match) 并将其替换为新字符串 - 目前您总是替换原始字符串中的新匹配。在这里,我$NewValue从原始字符串创建并不断替换其中的值...
if(preg_match_all("/\{\{[^{}]+\}\}/", $String, $matches)) {
$NewValue = $String;
foreach ($matches[0] as $match) {
$Count++;
$Query = "SELECT link FROM student WHERE linkVal = '".$match."'";
$Result = $con->query($Query);
if($row = $Result->fetch(PDO::FETCH_ASSOC)) {
$NewValue = preg_replace("/".preg_quote($match)."/",
$row["link"], $NewValue);
}
}
echo json_encode($NewValue);
}
您还应该考虑使用准备好的语句,因为目前您可能会遇到 SQL 注入问题。
- 3 回答
- 0 关注
- 161 浏览
添加回答
举报