1

PDO を使用して、データベースから行を取得するための簡潔なオブジェクトを PHP オブジェクトとして作成しました。最初の列の値は名前で、2 番目の列の値は目的の値です。

$sql = "SELECT * FROM `site`"; $site = array();
foreach($sodb->query($sql) as $sitefield){
    $site[$sitefield['name']] = $sitefield['value'];
}

これを 2 つのパラメーターを持つ関数に適用したいと思います。最初のパラメーターにはテーブルが含まれ、2 番目のパラメーターには任意の where 句が含まれ、同じ結果が生成されます。

function select($table,$condition){
    $sql = "SELECT * FROM `$table`";
    if($condition){
        $sql .= " WHERE $condition";
    }
    foreach($sodb->query($sql) as $field){
        return $table[$field['name']] = $field['value'];
    }
}

これを次のように呼べるという考え:

 <?php select("options","class = 'apples'");?>

最初の方法と同じ形式でページ上で使用されます。

<?php echo $option['green'];?>

field という名前の列の「green」という値と同じ行にある value という名前の列の値を教えてください。

もちろん問題は、関数がそのような foreach データを返さないことです。つまり、このビットです:

        foreach($sodb->query($sql) as $field){
            return $table[$field['name']] = $field['value'];
        }

そのようなデータを返すことはできません。

それを作る方法はありますか?

4

1 に答える 1

0

さて、これ:

$sql = "SELECT * FROM `site`"; $site = array();
foreach($sodb->query($sql) as $sitefield){
    $site[$sitefield['name']] = $sitefield['value'];
}

簡単にこれになることができます:

$sql = "SELECT * FROM `site`";
$site = array();
foreach( $sodb->query($sql) as $row )
{
    $site[] = $row;
}

print_r($site);

// or, where 0 is the index you want, etc.
echo $site[0]['name'];

したがって、すべての列のマップを多次元配列に取得できるはずです$site

また、入力をそのクエリに直接ダンプする前に、入力をサニタイズすることを忘れないでください。PDO の利点の 1 つは、プレースホルダーを使用して悪意のあるユーザーから身を守ることです。

于 2012-09-06T18:46:16.077 に答える