嘿, 我想运行在
下的字符串中找到的代码$str=" $row["AccountID"].$row["CurrencyID"] ";
像这样:
while($row = $result2->fetch_assoc()) {
echo $str;
}
,但输出显示如下:
$row["AccountID"].$row["CurrencyID"]
那不是我所需要的, 我怎样才能让它在字符串中运行代码,并允许它以变量形式而不是字符串形式读取“ $ row”字?
答案 0 :(得分: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()
,因为如果您无法完全控制输入内容,那么就很容易遭受危险的注射。
答案 1 :(得分:0)
这是一种方法:
sprintf('%d%d', $row["AccountID"], $row["CurrencyID"]);
%d是整数格式
答案 2 :(得分: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;
}