ZoekQuery met Zend_Db
Dit is wat ik al heb:
(in mijn zoek controller)
Code (php)
1
2
3
2
3
<?php
$db->query('SELECT artikelen WHERE Omschrijving LIKE %'.$this->view->escape($this->getRequest()->getParam('searchstring')).'% ');
?>
$db->query('SELECT artikelen WHERE Omschrijving LIKE %'.$this->view->escape($this->getRequest()->getParam('searchstring')).'% ');
?>
of
Code (php)
1
2
3
4
5
6
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();
?>
$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..
Code (php)
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
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();
}
?>
// 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
THX
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'%) ?<
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 knopje om je tekst aan te passen indien nodig.
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 knopje om je tekst aan te passen indien nodig.
Gewijzigd op 01/01/1970 01:00:00 door Andreas Warnaar
Code (php)
1
2
3
4
2
3
4
<?php
$sql = $articles->select()->where('Omschrijving LIKE ?','%'.$searchString.'%');
?>
$sql = $articles->select()->where('Omschrijving LIKE ?','%'.$searchString.'%');
?>
Volgens mij hoef je trouwens in deze 'where' die $searchString niet eens te escapen...
Code (php)
1
2
3
4
5
6
7
8
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);
?>
// 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
zou moeten zijn:
En denk je aan de hoofd en kleine letters? Doe gewoon alles in kleine letters, maakt het voor jezelf veel makkelijker
THX Arian
SQL output: SELECT `artikelen`.* FROM `artikelen` WHERE (Omschrijving LIKE '%afsc%')
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
?>
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