0

私は次の機能を持っています。引数で指定されたテーブルの行数を出力することを期待しています。

private function getTotalCount($tbl){
    $sql = "SELECT count(*) FROM :tbl ;";
    $sth = $this->db->prepare($sql);
    $sth->execute(array(
        ':tbl' => $tbl
    ));
    $data = $sth->fetch(PDO::FETCH_ASSOC);
    print_r($data);
}

しかし、関数は何も印刷していません...

関数を次のように置き換えると:

private function getTotalCount($tbl){
    $sql = "SELECT count(*) FROM $tbl ;";
    $sth = $this->db->prepare($sql);
    $sth->execute();
    $data = $sth->fetch(PDO::FETCH_ASSOC);
    print_r($data);
}

その後、正常に動作し、行数を出力します。

質問: execute() 関数が :tbl パラメータを $tbl にバインドしないのはなぜですか??

4

1 に答える 1

4

残念ながら、MySQL PDO は、SQL キーワード、テーブル名、ビュー名、およびフィールド名のパラメーターを受け入れません。これはメインのマニュアルにはあま​​り登場しませんが、コメントで何度か言及されています。

最初にテーブル名をサニタイズすることをお勧めします (テーブル名のホワイト リストと照合するのが理想的です)。詳細: PHP PDO ステートメントは、テーブルまたは列の名前をパラメーターとして受け入れることができますか?

于 2012-07-17T00:22:11.260 に答える