微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将变量传递到php eval

如何解决将变量传递到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\\\";\");
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。