Oznámení
chyba v modifikatoru %sql
před 10 lety
- knedle
- Člen | 34
jedna se o dvoji uvozovky ve stringu zpracovavanym modifikatorem %sql
trochu blbe se mi to vysvetluje
priklady
// nejdrive
$input = array("text%sql" => 'LOWER("retezec \'uvnitr uvozovek\' pak venku \"a jeste jendou\" a konec")');
dibi::test("INSERT INTO [test]", $input);
--sql;
INSERT INTO `test` (`text`)
VALUES (LOWER('retezec \'uvnitr uvozovek\' pak venku \\'a jeste jendou\' a konec'))
analogicky
$input = array("text%sql" => "LOWER('retezec \'uvnitr uvozovek\' pak venku \"a jeste jendou\" a konec')");
dibi::test("INSERT INTO [test]", $input);
--sql;
INSERT INTO `test` (`text`)
VALUES (LOWER('retezec \\'uvnitr uvozovek\' pak venku \"a jeste jendou\" a konec'))
tj. pokud mam cely (pro lower) retezec v jednoduchych uvozovkach a uvnitr jsou take jednoduche, osetrene pomoci zpetneho lomitka, pri prvnim nalezu „\'“ prida zpetne lomitko a sql dotaz je nevalidni
spravny vystup v obou pripadech by mel byt
INSERT INTO `test` (`text`)
VALUES (LOWER('retezec \'uvnitr uvozovek\' pak venku \"a jeste jendou\" a konec'))
před 10 lety
- David Grudl
- Nette Core | 6806
Tento zápis
$input = array("text%sql" => 'LOWER("retezec \'uvnitr uvozovek\' pak venku \"a jeste jendou\" a konec")');
je z podstaty dibi chápán jako databázově nezávislý a platí tady escapování podle pravidel dibi. A dibi escapuje zdvojením uvozovek. Tudíž je potřeba psát
$input = array("text%sql" => 'LOWER("retezec \'uvnitr uvozovek\' pak venku ""a jeste jendou"" a konec")');
Anebo použít databázově závislý modifikátor %SQL (velkými písmeny) a pak bude fungovat i tvůj zápis:
$input = array("text%SQL" => 'LOWER("retezec \'uvnitr uvozovek\' pak venku \"a jeste jendou\" a konec")');
Ale myslím, že nejsrozumitelnější je využít modifikátor:
$input = array("text%sql" => array('LOWER(%s)', 'retezec \'uvnitr uvozovek\' pak venku "a jeste jendou" a konec'));
před 10 lety
- knedle
- Člen | 34
pekne osvetleno, diky