Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem ORM Doctrine - bind proměnné typu string

Dobrý den,
rád bych vás poprosil o radu ohledně jednoduchého selectu.

Mám jednoduchý select, který vybírá z tabulky "Produkty" jeden produkt podle "sarze". Šarže je unikátní označeni produktu.

$text = "SELECT p FROM Entity\Product p WHERE p.sarze = :sarze";
$q = $this->dao->createQuery($text);
$q->setParameter(':sarze', $sarze);
        
return $q->getSingleResult();

V tabulce mám dva produkty. První má šarži '95' a druhý má šarži '95A'. Sloupec v tabulce je typu varchar(255)
Problém je v tom, že pokud vybírám produkt s šarží 95, tak mi to vrací oba dva (95 i 95A).
Jak je možné, že pokud mám

Zkoušel jsem i obalit :sarze do apostrofu, ale to zase vyhodí výjimku při $q->setParameter(':sarze', $sarze);

$text = "SELECT p FROM Entity\Product p WHERE p.sarze = ':sarze'";

Díky.

Předmět Autor Datum
Pokud bys tam měl Like '95%', tak neřeknu, ale nesetkal jsem se s tím, že by DB stroj vracel s rovní… poslední
Jan Fiala 23.02.2017 06:55
Jan Fiala

Pokud bys tam měl Like '95%', tak neřeknu, ale nesetkal jsem se s tím, že by DB stroj vracel s rovnítkem i něco 'navic'.

Pokud tam chceš dávat apostrofy, tak do dotazu, ne do nastaveni parametru. Zkus:

$text = "SELECT p FROM Entity\Product p WHERE p.sarze = ':sarze'";

Tam by podle mnne být měly, jinak je to engine převádí buď na string nebo na číslo. Pak to buď skončí chybou nebo převede tvůj 95A na číslo, takže bez padnutí z toho udělá 95. Pokud by šarže začínala znakem, končilo by to chybou.

Zpět do poradny Odpovědět na původní otázku Nahoru