ZoekQuery met Zend_Db

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Andreas Warnaar

Andreas Warnaar

08/10/2008 20:27:00
Quote Anchor link
Ik heb een beetje moeite met een ZoekQuery te maken met Zend_Db

Dit is wat ik al heb:
(in mijn zoek controller)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$db
->query('SELECT artikelen WHERE Omschrijving LIKE %'.$this->view->escape($this->getRequest()->getParam('searchstring')).'% ');
?>

of
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$articles
= new Articles();
$where = array('Omschrijving' => 'Omschrijving LIKE %'.$this->view->escape($this->getRequest()->getParam('searchstring')).'% ')
$rows = $articles->fetchAll($where);
$resultToView = $articles->toArray();
?>


Maar bovenstaande code werkt niet.

Iemand? plz..
 
PHP hulp

PHP hulp

21/11/2024 21:32:17
 
Arian Stolwijk

Arian Stolwijk

08/10/2008 21:51:00
Quote Anchor link
Zoiets zou hij het moeten doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
// zie: http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.introduction
class Articles extends Zend_Db_Table {
    
    // De tabel naam
    protected $_name = 'Articles';
    
}


// Vanaf hier natuurlijk in je controller (Anders werkt $this niet hè)
// Nieuwe instantie maken van Articles

$articles = new Articles();

$searchString = $this->getRequest()->getParam('searchstring');
// Niet zomaar in de query pleuren, maar eerst kijken of hij bestaat
if($searchString){
    // Dan escapen
    $searchString = $this->view->escape($searchString);
    
    // De query met Zend_Db_Select
    $sql = $articles->select()->where('Omschrijving LIKE %?%',$searchString);
    // Rijen ophalen
    $rows = $articles->fetchAll($sql);
    
    // Eventueel naar een array... maar $rows kan je zo ook wel met foreach doen enzo
//    $resultToView = $articles->toArray();

}
?>
Gewijzigd op 01/01/1970 01:00:00 door Arian Stolwijk
 
Andreas Warnaar

Andreas Warnaar

08/10/2008 21:59:00
Quote Anchor link
Ik ga het nu gelijk proberen.. Je maakt mijn avond een stuk fijner als dit werkt...

THX
 
Andreas Warnaar

Andreas Warnaar

08/10/2008 22:10:00
Quote Anchor link
Help:
Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%'afscherm'%)'

ik heb zelf geen idee wat ZF doet met het escapen en als een variabel zo als deze %?%',$searchString

'%'afscherm'%) ?<
 
Andreas Warnaar

Andreas Warnaar

08/10/2008 22:20:00
Quote Anchor link
Dit is de SQL die hij er uit **.
SELECT `artikelen`.* FROM `artikelen` WHERE (Omschrijving LIKE %'sdfsd'%)

'sdfsd' < de quotes zijn het probleem denk.

mod-edit::
Bumpen
Twee of meer keer achter elkaar in een topic posten, voordat andere forumleden gereageerd hebben, heet "bumpen". Omdat het opdringerig overkomt is bumpen pas na 24 uur toegestaan. Bumpen kan een reden zijn voor de admins en mods om een topic te sluiten. Gebruik het Afbeelding knopje om je tekst aan te passen indien nodig.
Gewijzigd op 01/01/1970 01:00:00 door Andreas Warnaar
 
Arian Stolwijk

Arian Stolwijk

08/10/2008 22:20:00
Quote Anchor link
Volgens mij kan je het zo al even doen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    $sql
= $articles->select()->where('Omschrijving LIKE ?','%'.$searchString.'%');

?>


Volgens mij hoef je trouwens in deze 'where' die $searchString niet eens te escapen...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
    // Dan escapen hoort eigenlijk niet zo: het hoort namelijk bij de view.
    $searchString = $this->view->escape($searchString);
    
    // Dit zou de goede zijn, als je $searchString direct in de SQL query zet. Als je Zend_Db_Select gebruikt, met die ?, hoeft dat volgens mij niet.
    $searchString = $articles->quote($searchString);

?>


Kijk ook nog even naar http://framework.zend.com/manual/en/zend.db.select.html
Gewijzigd op 01/01/1970 01:00:00 door Arian Stolwijk
 
Klaasjan Boven

Klaasjan Boven

08/10/2008 22:28:00
Quote Anchor link
Er gaat sowieso iets mis met de quotes
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT `artikelen`.* FROM `artikelen` WHERE (Omschrijving LIKE %'sdfsd'%)

zou moeten zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
    artikelen.*
FROM
    artikelen
WHERE
    (Omschrijving LIKE '%sdfsd%')

En denk je aan de hoofd en kleine letters? Doe gewoon alles in kleine letters, maakt het voor jezelf veel makkelijker
 
Andreas Warnaar

Andreas Warnaar

08/10/2008 22:48:00
Quote Anchor link
Deze Code werkt.
THX Arian

SQL output: SELECT `artikelen`.* FROM `artikelen` WHERE (Omschrijving LIKE '%afsc%')

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
if ($this->_request->isPost()) {
            $formData = $this->_request->getPost();
            if ($form->isValid($formData)) {
                $articles = new Articles();

                $searchString = $this->getRequest()->getParam('searchstring');
                    if($searchString){
                        $searchString = $this->view->escape($searchString);
                        $sql = $articles->select()->where('Omschrijving LIKE ?','%'.$searchString.'%');
                    
                        $rows = $articles->fetchAll($sql);
                        $this->view->top=$sql;                        
                        $this->view->result = $rows->toArray();
                    }            
            }
else {
                $form->populate($formData);
            }
        }


        $this->view->form = $form;
?>
Gewijzigd op 01/01/1970 01:00:00 door Andreas Warnaar
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.