将变量传递给要求值的PHP函数(DB查询)

将变量传递给要求值的PHP函数(DB查询),php,Php,我很难描述这个问题,这可能就是为什么我在谷歌上找不到答案的原因。。所以我想我应该在这里寻求帮助。如果我在重复这个问题,请随时告诉我该线程的链接 所以基本上我遇到的问题是,我试图将一个变量传递给一个函数,该函数包含一些要求值的php代码 以下是代码的简化版本: function senduser($body) { $query = mysql_query("SELECT * FROM User_tbl"); while ($row = mysql_fetch_array($que

我很难描述这个问题,这可能就是为什么我在谷歌上找不到答案的原因。。所以我想我应该在这里寻求帮助。如果我在重复这个问题,请随时告诉我该线程的链接

所以基本上我遇到的问题是,我试图将一个变量传递给一个函数,该函数包含一些要求值的php代码

以下是代码的简化版本:

function senduser($body) {

    $query = mysql_query("SELECT * FROM User_tbl");
    while ($row = mysql_fetch_array($query)) {

        echo eval($body);

    }

}

$body = 'Hello $row[\'user_first_name\'] <br>';
sendUser($body);

--
由于某些原因,输出没有输出我想要的。我得到了一些空白错误,并且有几次我得到了输出变量$body的纯文本的代码

感谢您的帮助。如果我需要进一步澄清这个问题,请告诉我。

这现在不起作用;除非显式返回值,否则它将返回null。字符串周围缺少引号,语句末尾缺少分号

要让它回显某些内容,必须将回显作为要评估的代码的一部分传递:

$body = 'echo "Hello $row[\'user_first_name\'] <br>";';
或者,要使代码按编写的方式工作,必须返回格式化字符串:

$body = 'return "Hello $row[\'user_first_name\'] <br>";';

这是一个相当做作的eval用法。您最好传入一个printf样式的格式字符串,并使用sprintf替换其中的值,然后返回该字符串进行打印。目前看来,您似乎将显示逻辑与数据库逻辑混为一谈,这是一种错误。

我将其更改为:

function sendUser($body) {
    $query = mysql_query("SELECT * FROM User_tbl");
    while ($row = mysql_fetch_array($query)) {
        echo $body($row);
    }
}
然后像这样调用PHP5.3+:

$body = function ($row) {
    return "Hello ".
        htmlspecialchars($row['user_first_name'], ENT_QUOTES, 'UTF-8').
        "<br />";
};
sendUser($body);

在php中,您的代码将永远无法正常工作。删除mysql部分:

<?php

function senduser($body) {
    $row['user_first_name'] = 'Fred';
    echo eval($body);
}

$body = 'Hello $row[\'user_first_name\'] <br>';
sendUser($body);
传递给eval的任何内容都必须是原始PHP代码。它不能是嵌入PHP块的纯文本-它必须是实际的PHP代码。当您将$body设置为帐户时:

$body = 'echo "Hello {$row[\'user_first_name\']} <br>";';
然后你会得到:

Hello Fred <br>

我不是很肯定你想做什么,但我认为你的问题在于$body的定义和eval的使用

$body = 'Hello $row[\'user_first_name\'] <br>';
不是有效的php行,eval不知道如何处理它

看看这是否符合您的要求:

function senduser($body) {
    $query = mysql_query("SELECT * FROM User_tbl");
    while ($row = mysql_fetch_array($query)) {
        eval($body);
    }
}

$body = 'echo "Hello {$row[\'user_first_name\']} <br>";';
sendUser($body);

$body变量是否包含?如果您希望其他人回答您的问题,请注意正确设置问题的格式。@Lada:eval不需要-它假定字符串包含原始PHP代码。它不会解析纯文本字符串并查找块-整个字符串必须是PHP代码。哦,天哪。我甚至无法理解上面的恐怖。不要使用eval。使用回调或匿名函数,没有必要这样做…可能只是我,但代码没有多大意义。您正在循环查询返回的数据,但实际上并没有在每个循环中使用它。您在函数内部分配$row,但只在函数外部引用它。printf/sprintf的想法也很容易实现。我想我会使用这个方法,因为它是多么的简单和干净。非常感谢。
$body = 'Hello $row[\'user_first_name\'] <br>';
function senduser($body) {
    $query = mysql_query("SELECT * FROM User_tbl");
    while ($row = mysql_fetch_array($query)) {
        eval($body);
    }
}

$body = 'echo "Hello {$row[\'user_first_name\']} <br>";';
sendUser($body);