-2

mysql と PDO について無数の質問のように思えるものがあります。古い mysql* PHP 関数の代わりに PDO の使用を開始する方法を自分自身に課しました。

説明するのは少し難しいですが、私はサイトを可能な限り効率的にしたいと思っています (とにかく PHP の観点から)。MySQL PDO に関する優れたチュートリアルをたくさん見つけましたが、これに対する解決策を見つけることができませんでした。

さまざまなテーブルに含まれるすべてのデータを定期的にクエリしたいとします。その目的のために、1 つの引数 (クエリするテーブルの名前) を持つ関数を設定するつもりです: 次のようなもの:

function getData($table)
{
    global $db;
    $SQL_query = "SELECT * FROM $table";
    $statement = $db->query($SQL_query);
    $result = $statement->fetch(PDO::FETCH_NUM);
    return $result;
}

これは正常に機能します。ただし、関数はテーブルの最初の「行」のみを返します。問題は次のとおりです。すべての行を返す関数を作成するにはどうすればよいですか? 私はこのようなことを試すことができます:

function getData($table)
{
    global $db;
    $SQL_query = "SELECT * FROM $table";
            $statement = $db->query($SQL_query);
            while ($row = $statement->fetch(PDO::FETCH_NUM)
    {
    return $result;
            }
}

ヒント/推奨事項などに感謝します...この種の望ましい動作のベストプラクティスがある場合は?

4

2 に答える 2

1

この機能に対するあなたの考えはかなり間違っています。

Mike Brant が言ったように、テーブルからすべてのデータを選択しても意味がありません。おそらく、データベースとフラット ファイルを混同しているのでしょう。SQL の力をすぐに利用できますが、それを使用しないのは犯罪です。

そのため、関数がSQL クエリとそのパラメーターを受け入れ、PDO で必要とされるようにバインドされるようにします。

function getData()
{
    $global $db;
    $params = func_get_args();
    $query = array_shift($args);

    $stmt = $db->prepare($query);
    $stmt->execute($params);
    return $stmt->fetchAll();
}

そして今、あなたはこのようにそれを使うことができます

$rows = getData("SELECT * FROM t WHERE cat=?",$category);

いいですね。

これは本当に便利で便利な機能です。

于 2013-05-23T05:53:55.930 に答える