3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
在每個(gè)匹配的循環(huán)中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貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以通過(guò)在一個(gè)查詢中獲取所有替換值來(lái)極大地簡(jiǎn)化代碼:
$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貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的代碼存在一些問(wèn)題,您需要確保 中的變量preg_match_all()是您嘗試搜索的字符串。
但主要問(wèn)題在于更換部件。您需要替換當(dāng)前匹配值 ( $match) 并將其替換為新字符串 - 目前您總是替換原始字符串中的新匹配。在這里,我$NewValue從原始字符串創(chuàng)建并不斷替換其中的值...
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);
}
您還應(yīng)該考慮使用準(zhǔn)備好的語(yǔ)句,因?yàn)槟壳澳赡軙?huì)遇到 SQL 注入問(wèn)題。
- 3 回答
- 0 關(guān)注
- 187 瀏覽
添加回答
舉報(bào)