парсинг — как выполнить код, найденный в строке в переполнении стека

Heyy,
Я хочу запустить код, найденный в строке ниже

$str=" $row["AccountID"].$row["CurrencyID"] ";

как это:

while($row = $result2->fetch_assoc()) {
echo $str;
}

но вывод отображается так:

 $row["AccountID"].$row["CurrencyID"]

Это не то, что мне нужно,
Как я могу заставить его выполнить код внутри строки и позволить ему читать слово «$ row» как переменную, а не как строку?

1

Решение

это способ:

sprintf('%d%d', $row["AccountID"], $row["CurrencyID"]);

% d — целочисленный формат

0

Другие решения

Языки программирования, такие как PHP, по понятной причине не будут оценивать строки. В вашем приложении будут огромные дыры в безопасности, если PHP попытается оценить все, что находится в строках.

Причина по которой $str = "$row"; работает потому, что PHP оценивает "$row" до того, как строка будет даже назначена. Переменная $row не живет в $str, значение делает.

Распространенным вариантом использования является сохранение синтаксиса шаблона и замена заполнителей в вашем представлении. Возможные заполнители %AccountID% или же {{AccountID}}, Что бы вы ни предпочли, а затем с помощью замены строк в тех заполнителях с $row значения внутри цикла:

$template = "The account ID is %AccountID%.";

...

while($row = $result2->fetch_assoc()) {
echo str_replace('%AccountID%', $row['AccountID'], $template);
}

Я призываю вас не полагаться на eval() здесь, потому что это оставит вас открытыми для опасных инъекций, когда у вас нет полного контроля над вводом.

0

Вы можете найти и заменить значения в строке, используя этот метод взрыва / взрыва.

$str = '$row["AccountID"].$row["CurrencyID"]';

//first remove the '.'
$str = implode('', explode('.', $str));

while($row = $result2->fetch_assoc()) {
$row_str = $str;
foreach($row as $field=>$value){
$row_str = implode($value, explode('$row["'.$field.'"]', $row_str ));
}
echo $row_str;
}
0
По вопросам рекламы [email protected]