将变量传递给php eval()

时间:2011-05-26 06:48:58

标签: 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 这就是说varibale $ uid没有通过。 如何将变量传递给计算的字符串。 感谢。

5 个答案:

答案 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;
?>