tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

Zpětné uvozovky v podmínce

Paimutan
Člen | 33

Ahojte,

mám problém s tím, že dibi automaticky vkládá zpětné uvozovky do následujícího dotazu:

volání funkce s dotazem:

$user = $this->userModel->getUsers(
    array('LOWER( u.email )' => strtolower('nejaky@Email.cz'))
);

metoda provádějící dotaz (resp. její důležitá část)

public function getUsers($where, ...)
{
    ...
    return $this->db->query(
      'SELECT ... from [uzivatel] u ',
      '%if', isset($where), 'WHERE %and', isset($where) ? $where : array(), '%end',
      '%if', isset($order), 'ORDER BY %by', $order, '%end',
      '%if', isset($limit), 'LIMIT %i %end', $limit,
      '%if', isset($offset), 'OFFSET %i %end', $offset
    )->fetchAll();

A teď ten problém. Dibi ze zadaného vygeneruje tento dotaz:

SELECT
  ...
FROM `uzivatel` u
WHERE (`LOWER( u`.`email )` = 'nejaky@Email.cz')

tedy obalí údaje z WHERE těmi zpětnými uvozovkami, z čehož v tomto případě vznikne syntax error. Jak se toho zbavit? Potřebuju na ten sloupec ve WHERE aplikovat funkci LOWER a nenašel jsem řešení, jak toho docílit.

Díky za jakékoliv nasměrování

Milo
Nette Core | 1119
$user = $this->userModel->getUsers(array(
    array('LOWER([u.email]) = %s', 'nejaky@Email.cz')
));

Komentáře

Paimutan:

funguje parádně, díky :)

před 5 lety
Tharos
Člen | 1042

Nefungovalo by tohle?

$user = $this->userModel->getUsers(
    array('LOWER(`u`.`email`)%sql' => strtolower('nejaky@Email.cz'))
);

Komentáře

Paimutan:

Díky za tip, ale bohužel z toho vyleze toto:

...
WHERE (`LOWER(``u```.```email``)` = nejaky@Email.cz)
před 5 lety