-1

我有一个从 MySQL 中选择的简单函数:

function dbSelect($query) {
    $db = db(); // refers to a database connect function
    $result = mysqli_query($db, $query);

    while ($row = mysqli_fetch_array($result)) {
       echo $row['f_name'] . ' : ' . $row['s_name'] . '</br>';
    }
}

如您所见,它接受 $query var,它是:

$query = "SELECT * FROM user"; // or whatever

我想做的是通过这条线:

echo $row['f_name'] . ' : ' . $row['s_name'] . '</br>';

作为函数调用中的 arg,例如:

function dbSelect($query, $display)

并且 $display 类似于(我会在 while 语句下回显):

$display = $row['f_name'] . " : " . $row['s_name'] . "</br>";

上面的行会给出一个未定义的变量错误,我知道为什么。

我将如何将 $display 传递给函数或正确定义它?

附言。我知道没有任何错误检查,我只是想弄清楚这一点,稍后会添加。:-)

谢谢你的帮助

4

3 回答 3

0

有两种方法可以做到这一点。正确的方法是让这个函数只运行查询并返回结果。您可以制作另一个输出结果的函数。这样,您就可以清楚地分离代码中的逻辑。

但是,如果您知道您希望以这种方式完成,那么这样的事情应该可以工作:

function dbSelect($query, $format) {
    $db = db();
    $result = mysqli_query($db, $query);
    while ($row = mysqli_fetch_array($result)) 
    {
        echo preg_replace_callback("/\{\{\s*(\w+)\s*\}\}/", function($matches) use ($row) { $column = trim($matches[1]); return isset($row[$column]) ? $row[$column] : $matches[0]; }, $format);
    }
}

论点可能类似于:

dbSelect("SELECT * FROM user", "{{ f_name }} {{ s_name }}");

您不能以传递它的方式传递它,因为$row调用函数时它不存在(因为它是在函数内部定义的)。此外,当调用函数时,您的变量将被评估一次,而不是每次在 while 循环中。

在任何人提出“建议”之前:eval 不是一种选择。

于 2013-02-20T13:04:54.517 回答
0

就我个人而言,我会将模板名称传递给函数,并将模板作为具有标准替换变量的 html 片段存储在某处

所以你可能有这样的东西(注意这行不通,盒子需要一些摆弄,但它的概念)

    define TEMPLATE_NAME = "<tr><td>%COL1%</td><td>%COL2</td></tr>";

    $colstospitout = array('COL1'=>'f_name','COL2'=>'s_name');


    function dbSelect($query,$reportcols,$templatename) {

    while ($row = mysqli_fetch_array($result)) 
          {
           $template = str_replace("%COL1%",$reportcols['COL1'],$templatename);
           $template = str_replace("%COL2%",$reportcols['COL2'],$templatename);
           echo $template;
          }

    }

dbSelect($inputquery,$colstospitout,TEMPLATE_NAME);
于 2013-02-20T13:09:05.023 回答
0

试试这个,以保持从程序逻辑到程序输出的分离:

// some configuration file you include
$db = db(); // refers to a database connect function

// some common functions file
function dbSelect($query)
{
    global $db;
    $result = mysqli_query($db, $query);
    return $result;
}

// output script
$records = dbSelect('SELECT * FROM somewhere');
// loop until cannot fetch any more rows from the record set
while ($row = mysqli_fetch_array($records))
{
       echo $row['f_name'] . ' : ' . $row['s_name'] . '</br>';
}
于 2013-02-20T14:34:27.363 回答