Er det en måte å passere argumenter til en spørring i CodeIgniter * uten * å bruke Active?

stemmer
0

Dette er hva jeg ønsker å gjøre, men det synes ikke mulig: (Edit: endret enkelt å doble anførselstegn)

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...

}

Det gir denne feilen: (edit: ny feilmelding ved hjelp av doble anførselstegn, og med en offset nummer vedtatt i URL)

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

Det fungerer bare hvis du passerer variablene ved hjelp av Active format:

$this->db->select('archivalie.id, archivalie.signature, etc, etc');
// from, where, etc.
$this->db->limit($limit, $offset);        
$query = $this->db->get();
Publisert på 09/10/2008 klokken 15:46
kilden bruker
På andre språk...                            


4 svar

stemmer
-1

Hvis du brukte anførselstegn i stedet for med apostrof det ville fungere, men du vil være åpen for en injeksjon angrep hvis variablene ikke ble sterilisert skikkelig.

Svarte 09/10/2008 kl. 15:49
kilden bruker

stemmer
1

Dette fungerte:

$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
");

Men det krever en sjekk for å tildele en standardverdi hvis ingen offset er til stede i nettadressen. Fra min controller:

# 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);
Svarte 10/10/2008 kl. 08:41
kilden bruker

stemmer
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));
Svarte 14/10/2012 kl. 16:14
kilden bruker

stemmer
0

Det har å gjøre med datatype for parameteren. Hvis du ikke ønsker CodeIgniter å legge til '' enkle anførselstegn, må du passerer et heltall.

$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));
Svarte 07/12/2016 kl. 02:28
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more