如何将变量/ s传递给while循环MySQLi

时间:2013-02-20 12:58:51

标签: php mysqli

我有一个从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传递给函数或正确定义它?

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

感谢您的帮助

3 个答案:

答案 0 :(得分: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循环中。

在任何人提出&#34;建议之前&#34;: eval不是一种选择。

答案 1 :(得分: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);

答案 2 :(得分: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>';
}