Php 如何将变量传递到while循环MySQLi

Php 如何将变量传递到while循环MySQLi,php,mysqli,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'] .

我可以从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>';
    }
}
我想做的是越过这条线:

echo $row['f_name'] . ' : ' . $row['s_name'] . '</br>';
$display是这样的(我将在while语句下呼应):

$display=$row['f_name']。" : " . $行['s_name']。“
”;
上面的一行将给出一个未定义的变量错误,我知道原因

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

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


谢谢你的帮助。有两种方法。正确的方法是让这个函数只运行查询并返回结果。您可以创建另一个输出结果的函数。这样,代码中的逻辑就有了清晰的分离

但是,如果您知道希望以这种方式完成,那么类似的方法应该可以:

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不是一个选项。

我个人会将模板名称传递到函数中,并将模板作为html片段存储在某个地方,其中包含标准替换变量

因此,您可能会遇到类似的情况(注意,这不会解决问题,盒子需要一些摆弄,但这是概念)

define TEMPLATE_NAME=“%COL1%%COL2”;
$colstospitout=array('COL1'=>'f_name','COL2'=>'s_name');
函数dbSelect($query、$reportcols、$templatename){
while($row=mysqli\u fetch\u数组($result))
{
$template=str_replace(“%COL1%”,$reportcols['COL1'],$templatename);
$template=str_replace(“%COL2%”,$reportcols['COL2'],$templatename);
echo$模板;
}
}
dbSelect($inputquery,$colstospitout,模板名称);

尝试此操作,以保持从程序逻辑到程序输出的分离:

// 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>';
}
//包含的一些配置文件
$db=db();//指数据库连接函数
//一些常用函数文件
函数dbSelect($query)
{
全球$db;
$result=mysqli_查询($db$query);
返回$result;
}
//输出脚本
$records=dbSelect('SELECT*fromwhere');
//循环直到无法从记录集中获取更多行
while($row=mysqli\u fetch\u数组($records))
{
echo$row['f_name']。:'。$row['s_name']。
'; }
数据库中的表包含哪些列?这意味着$row数组缺少键值为“f_name”或“s_name”的条目,但是我在以前的代码片段中注意到,s_name是不带引号的,这可能是问题所在。我认为通常从函数中获得输出不是一个好的做法。函数应该被赋予信息,并提供对输入有意义的数据返回。您应该只是传递查询,获取该查询的结果,然后对其进行处理,在本例中,将它们回送到函数中。TY,TY这就是我想要的,尽管我必须更改行:$records=dbSelect('SELECT*FROM somewhere');to$records=dbSelect($query);因为它给了我一个boldOnly变量可以通过referencebold错误传递,再次感谢我的bad had函数foo(&$bar)you语句是正确的。:-)
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 }}");
    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);
// 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>';
}