我正在使用php eval()函数,下面是我的陈述:
$uid = 8;
$str = 'SELECT COUNT(*) FROM uchome_blog WHERE uid=$uid';
eval("\$str = \"$str\"");
die("$str");
//$query = $_SGLOBAL['db']->query($str);
//$result = $_SGLOBAL['db']->fetch_array($query);
输出为:SELECT COUNT(*)FROM uchome_blog WHERE uid = $ uid 这就是说varibale $ uid没有通过。 如何将变量传递给计算的字符串。 感谢。
答案 0 :(得分:1)
您无法直接将变量插入单引号字符串中。试试这个:
$str = "SELECT COUNT(*) FROM uchome_blog WHERE uid=$uid"; // double-quotet
或者这个:
$str = 'SELECT COUNT(*) FROM uchome_blog WHERE uid='.$uid; // string-concatenation
答案 1 :(得分:1)
根据php手册:http://php.net/manual/en/function.eval.php
代码将在调用eval()的代码范围内执行。 因此,eval()调用中定义或更改的任何变量都将保留 在它终止后可见。
因此,如果您需要的变量是在您调用eval()
的范围内定义的,那么一切都应该按预期工作。
答案 2 :(得分:0)
变量替换仅适用于双引号字符串。
试试这个:
$uid = 8;
$str = "SELECT COUNT(*) FROM uchome_blog WHERE uid=$uid"; # variable gets substituted here
eval("\$str = \"$str\"");
die("$str");
我认为变量替换是在解析时发生的 - 它不是递归完成的,所以在eval
中,$str
的内容被粘贴到字符串中,但是没有完成$uid
内$str
内容的第二次。
答案 3 :(得分:0)
你错过了一个分号。 试试这个:
eval("\$str = \"$str\";");
答案 4 :(得分:0)
你也可以使用它,但它没有意义,这是使用 eval 的错误逻辑
示例 1:
<?php
$uid = 8;
$OUTPUT = '<?php $str = "SELECT COUNT(*) FROM uchome_blog WHERE uid=$uid"; ?>';
eval(" ?> $OUTPUT <?php ");
echo $str;
exit;
?>
示例 2:
<?php
$uid = 8;
$str = '<?php $str = "SELECT COUNT(*) FROM uchome_blog WHERE uid=$uid"; ?>';
eval(" ?> $str <?php ");
echo $str;
exit;
?>