如何解决将变量传递到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 举报,一经查实,本站将立刻删除。