1

Codeigniterを使用してコントローラーからモデルにデータを渡すのに問題があります。ブラウザコンソールで内部サーバーエラーが発生しましたが、上記の問題に絞り込みました。

これが私のコードです:

コントローラ

public function get_results() {
        $numOfDraws = $this->input->post('numOfDraws');
        $data = $this->lotto_model->get_results($numOfDraws);
        echo json_encode($data);
    }

モデル

  public function get_results($numOfDraws)
        {
            $query = $this->db->query('SELECT * FROM lotto ORDER BY id DESC LIMIT "$numOfDraws"');
            return $query->result();
        }

ハードコードを作成するとLIMIT、クエリは正常に機能します。私はそれ$numOfDrawsがコントローラーの正しい値に等しいことを知っています。

誰かアドバイスできますか?

4

3 に答える 3

4

まず、文字列への変数の挿入は、一重引用符ではなく、二重引用符でのみ機能します。次に、現在のコードはSQLインジェクションに対してオープンです。

CodeIgniterは、これを防ぐ機能を提供します。

$query = $this->db->query('SELECT * FROM lotto ORDER BY id DESC LIMIT ?', array($numOfDraws));
于 2013-01-06T14:40:34.057 に答える
3

クエリは一重引用符で囲まれているため、変数は解析されません。生成されたSQLは文字通り次のようになります。

SELECT * FROM lotto ORDER BY id DESC LIMIT "$numOfDraws"

よりクリーンな構文、抽象化、およびより優れたセキュリティが必要な場合は、CIの「ActiveRecord」クラスを使用してください。

public function get_results($numOfDraws)
{
    return $this->db
        ->limit($numOfDraws)
        ->order_by('id', 'DESC')
        ->get('lotto')
        ->result();
}

または、元のクエリを修正する1つの方法:

$query = $this->db
    ->query('SELECT * FROM lotto ORDER BY id DESC LIMIT '.(int) $numOfDraws);
于 2013-01-06T14:44:33.510 に答える
1

これを試して -

        $query = $this->db->query("SELECT * FROM lotto ORDER BY id DESC LIMIT $numOfDraws");
        return $query->result();
于 2013-01-06T14:38:02.970 に答える