0

これは私がやりたいことですが、可能ではないようです:(編集:一重引用符を二重引用符に変更)

function get_archives($limit, $offset) 
{
    $query = $this->db->query("
        SELECT  archivalie.id, 
                archivalie.signature, 
                type_of_source.description AS type_of_source_description, 
                media_type.description AS media_type_description,
                origin.description AS origin_description

        FROM    archivalie, 
                type_of_source, 
                media_type,
                origin

        WHERE   archivalie.type_of_source_id = type_of_source.id                                                        
        AND     type_of_source.media_type_id = media_type.id  
        AND     archivalie.origin_id = origin.id                                                                     

        ORDER BY    archivalie.id ASC
        LIMIT       $limit, $offset
    "); 


    // etc...

}

次のエラーが表示されます: (編集: 二重引用符を使用し、URL にオフセット番号が渡された新しいエラー メッセージ)

ERROR: LIMIT #,# syntax is not supported HINT: Use separate LIMIT and OFFSET clauses.

ActiveRecord 形式を使用して変数を渡す場合にのみ機能します。

$this->db->select('archivalie.id, archivalie.signature, etc, etc');
// from, where, etc.
$this->db->limit($limit, $offset);        
$query = $this->db->get();
4

4 に答える 4

2
$query = $this->db->query('
SELECT  archivalie.id, 
        archivalie.signature, 
        type_of_source.description AS type_of_source_description, 
        media_type.description AS media_type_description,
        origin.description AS origin_description
FROM    archivalie, 
        type_of_source, 
        media_type,
        origin
WHERE   archivalie.type_of_source_id = type_of_source.id                                                        
AND     type_of_source.media_type_id = media_type.id  
AND     archivalie.origin_id = origin.id                                                                     
ORDER BY    archivalie.id ASC
LIMIT       ?
OFFSET      ?',array($limit,$offset));
于 2012-10-14T16:14:03.477 に答える
1

これはうまくいきました:

$query = $this->db->query("
    SELECT  archivalie.id, 
            archivalie.signature, 
            type_of_source.description AS type_of_source_description, 
            media_type.description AS media_type_description,
            origin.description AS origin_description

    FROM    archivalie, 
            type_of_source, 
            media_type,
            origin

    WHERE   archivalie.type_of_source_id = type_of_source.id                                                        
    AND     type_of_source.media_type_id = media_type.id  
    AND     archivalie.origin_id = origin.id                                                                     

    ORDER BY    archivalie.id ASC
    LIMIT       $limit
    OFFSET      $offset
");

ただし、URL にオフセットが存在しない場合は、デフォルト値を割り当てるチェックが必要です。私のコントローラーから:

# Check/assign an offset
$offset = (!$this->uri->segment(3)) ? 0 : $this->uri->segment(3);

# Get the data
$archives = $this->archive->get_archives($config['per_page'], $offset);
于 2008-10-10T08:41:36.557 に答える
0

パラメータのデータ型に関係しています。Codeigniter に `'' 単一引用符を追加させたくない場合は、整数を渡していることを確認してください。

$page = '10'; // for some reason this arrives as a string
$sql = "select * from customers limit 10 offset ?";
$result = $this->db->query($sql, array(intval($page));
于 2016-12-07T02:28:38.083 に答える
-1

一重引用符の代わりに二重引用符を使用しても機能しますが、変数が適切にサニタイズされていないと、インジェクション攻撃を受ける可能性があります。

于 2008-10-09T15:49:42.603 に答える