Heyy,
Я хочу запустить код, найденный в строке ниже
$str=" $row["AccountID"].$row["CurrencyID"] ";
как это:
while($row = $result2->fetch_assoc()) {
echo $str;
}
но вывод отображается так:
$row["AccountID"].$row["CurrencyID"]
Это не то, что мне нужно,
Как я могу заставить его выполнить код внутри строки и позволить ему читать слово «$ row» как переменную, а не как строку?
это способ:
sprintf('%d%d', $row["AccountID"], $row["CurrencyID"]);
% d — целочисленный формат
Языки программирования, такие как 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()
здесь, потому что это оставит вас открытыми для опасных инъекций, когда у вас нет полного контроля над вводом.
Вы можете найти и заменить значения в строке, используя этот метод взрыва / взрыва.
$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;
}