0

こんにちは、いくつかのプラグインを追加するスクリプトを作成していましたが、mysql ステートメントでいくつかの文字を理解できませんでした。意味:ありがとう

else { // -------------------------------------------------------- user/all
        $conditions = '';
        if( !empty($this->user) ) {
            $conditions .= ' AND i.user = :3';
        }

        $this->thumbs = DB::query(
            'SELECT SQL_CALC_FOUND_ROWS
                i.logged, UNIX_TIMESTAMP(i.logged) AS loggedTS,
                i.keyword, i.thumb, i.score, i.votes,
                u.name AS userName
            FROM '.TABLE_IMAGES.' i
            LEFT JOIN '.TABLE_USERS.' u
                ON u.id = i.user
            WHERE 1 '.$conditions.'
            ORDER BY i.id DESC
            LIMIT :1, :2',

            $this->page * $this->thumbsPerPage,
            $this->thumbsPerPage,
            $this->user['id']
        );
    }
4

3 に答える 3

3

技術的には SQL の一部ではありません。それはパラメータ化されたフィールドです。に渡される二次引数を参照し、DB::queryおそらく SQL インジェクションのリスクなしにユーザー入力をクエリに安全に渡すことができます。

順番に:

:1に対応$this->page * $this->thumbsPerPage

:2に対応$this->thumbsPerPage

:3に対応$this->user['id']

于 2013-07-07T22:59:42.577 に答える
1

この場合、:2は関数に与えられた 3 番目の引数 を参照し$this->thumbsPerPage、 は を:3参照し$this->user['id']ます。これは MySQL のことではなく、DB::query関数が行うことです。

于 2013-07-07T22:58:48.230 に答える
0

コロンは、値をパラメーターで置き換える必要があることを指定するために使用されることがあります。DB::query() の最初の引数は文字列クエリで、次の 3 つはすべてパラメータであることに注意してください。これらのパラメーターは、:NUMBER で指定された形式を使用して SQL 文字列に配置されます。

あなたの例では、:3 は $this->user['id'] に置き換えられます。これは、クエリに渡される 3 番目のパラメーターだからです。

ただし、パラメーター化された SQL クエリでは、? 通常、この目的で使用されます。使用している DB 接続ライブラリのドキュメントをチェックして、これが適切なパラメーター構文であることを確認してください。

于 2013-07-07T23:02:12.807 に答える