将函数返回的字符串作为代码执行


Executing a string returned by a function as code

我正在尝试创建一个用户定义的函数,该函数查询数据库中的表,评估字段数,并将每个字段分配给一个变量。我已经能够做到这一点,但返回是一个字符串,当我真正希望它作为代码执行时,它只显示为文本。

这是代码:

function query_function() { 
    $client_selected = "1";
    $name = "";
    $result = mysql_query("SELECT * FROM client_table WHERE client_id = '$client_selected'"); 
    $row = mysql_fetch_array($result);
    $num=mysql_num_fields($result);
    $i = 0;
    while ($i < $num) { 
        $name .= "$" . mysql_field_name($result, $i);
        $name .= " = $" . "row['" . mysql_field_name($result, $i) . "'];"; 
        $i++;
    } 
    return $name;
}  

只使用会简单得多

extract(mysql_fetch_assoc($result), EXTR_SKIP);

http://php.net/manual/en/function.extract.php

同样,你可以这样做:

$name = mysql_field_name($result, $i);
$$name = $row[$name];

例如:

$row = array(
    'a' => 1,
    'b' => 2,
    'c' => 3,
);
extract($row, EXTR_SKIP);
var_dump($a, $b, $c);
$name = 'd';
$$name = 4;
var_dump($d);

http://codepad.org/yvW0G8xc

还要注意,mysql_*函数已弃用。您应该使用mysqliPDO

我相信您正在寻找的是eval()

但是,使用eval时要非常小心。只有当您100%确定您的查询正在向$name变量中提取什么时,才使用它。