将变量传递到php eval()

| 我正在使用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 也就是说,变量$ uid没有通过。 如何将变量传递到求值字符串中。 谢谢。     
已邀请:
您不能直接将可变变量插入单引号字符串。尝试这个:
$str = \"SELECT COUNT(*) FROM uchome_blog WHERE uid=$uid\"; // double-quotet
或这个:
$str = \'SELECT COUNT(*) FROM uchome_blog WHERE uid=\'.$uid; // string-concatenation
    
根据php手册:http://php.net/manual/en/function.eval.php   该代码将在调用eval()的代码范围内执行。   因此,在eval()调用中定义或更改的任何变量都将保留   终止后可见。 因此,如果在调用“ 3”的范围内定义了所需的变量,则所有操作均应按预期进行。     
变量替换仅适用于双引号字符串。 尝试这个:
$uid = 8;
$str = \"SELECT COUNT(*) FROM uchome_blog WHERE uid=$uid\"; # variable gets substituted here
eval(\"\\$str = \\\"$str\\\"\");
die(\"$str\");
我认为变量替换是在解析时发生的-它不是递归完成的,因此在您的
eval
中,
$str
的内容被粘贴到字符串中,但是对于
$str
中的
$uid
的内容却没有第二次执行。     
您缺少分号。 尝试这个:
eval(\"\\$str = \\\"$str\\\";\");
    

要回复问题请先登录注册