-1

MySQL から SELECT する簡単な関数があります。

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>';

関数呼び出しの引数として、例えば:

function dbSelect($query, $display)

$display は次のようになります (while ステートメントの下でエコーアウトします):

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

上記の行では、未定義の変数エラーが発生します。理由はわかっています。

$display を関数に渡すか、正しく定義するにはどうすればよいですか?

ps。エラーチェックがないことはわかっています。これを理解しようとしているだけです。後で追加します。:-)

助けてくれてありがとう

4

3 に答える 3

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

それには2つの方法があります。これを行う適切な方法は、この関数にクエリのみを実行させ、結果を返すことです。結果を出力する別の関数を作成できます。このようにして、コード内のロジックを明確に分離できます。

ただし、この方法で実行したいことがわかっている場合は、次のように機能するはずです。

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 ループのたびにではなく、関数が呼び出されたときに1 回評価されます。

そして、誰かが「提案」をする前に: eval はオプションではありません。

于 2013-02-20T13:04:54.517 に答える
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 に答える