我有一个从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。我知道没有任何错误检查,我只是想弄清楚,稍后会添加。 : - )
感谢您的帮助
答案 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>';
}