Nejste přihlášen(a)
Jaký je význam hranatých závorek v SQL query? Jde mi o rozdíl mezi
<?php
dibi::query('SELECT * FROM [table]');
?>
a
<?php
dibi::query('SELECT * FROM table');
?>
Ošetří to identifikátor.
Například zatímco
dibi::query("select * from table order by order");
vyhodí chybu, protože order je klíčově slovo, tak
dibi::query("select * from [table] order by [order]");
se v mysql přeloží jako
select * from `table` order by `order`
takže chyba nenastane.
Aha, takže zápis
<?php
dibi::query("select * from [table] order by [order]");
?>
je formálně totožný s následujícím zápisem?
<?php
dibi::query("select * from `table` order by `order`");
?>
Ano, jen dibi dává možnost psát [], protože ` leckdo neumí napsat.
Navíc se to vždycky převede podle konkrétního driveru, takže třeba
u oracle by mělo vzniknout "...", ať už tam napíšeš []
nebo `.
Rozumím. Pravda je, že ` se snadno zamění za ' a pak to jde celé do pekel. Závorky se tedy jeví jako velmi rozumná alternativa. Moc díky za odpověď.
`` je výmysl mysql a pár dalších se toho chytlo. [] je zase výmysl microsoftu. ve standardu sql jsou pokud vím dvojité uvozovky "", ale ty zas třeba mysql a postgresql neumí
proto je v dibi možno používat buď `` nebo [] a dibi to vždy převede na správnou variantu podle připojeného ovladače
paranoiq napsal(a):
… ale ty zas třeba mysql a postgresql neumí
PostgreSQL používa práve " na uzatváranie
identifikátorov.
dibi::connect(array('driver' => 'postgre'));
dibi::test('SELECT [column] FROM [table]');
SELECT "column"
FROM "table"
Chtel bych se zeptat zda je nejakym zpusobem mozne domluvit dibi co ma pouzit, zda [..], „..“ nebo proste nic. Mam totiz takovy problem, pokud zadam dotaz
dibi::query('UPDATE [table] SET ',array('column' => 'text'));
tak vypadne
UPDATE [table] SET [column] = 'text'
Coz je sice dobre, ale v mem pripade ( spojeni ODBC na ORACLE 9.2.. )to zahlasi chybu. Ale pokud zadam primo
dibi::query('UPDATE [table] SET column = 'text');
tak vse probehne bez problemu..
Tento problem mam jen s INSERTem a UPDATEm, SELECT a DELETE funguji naprosto
normalne.
Predem diky za radu :)
Protoze se tu nic nedeje, zkousim se pripomenout s dotazem zda nejde nejak
rucne zakazat vkladani nechtenych [] zavorek.
Pri kombinaci spojeni ODBC|ORACLE 9.2|Dibi 1.2 se nedaji vyuzit tekuté SQL
příkazy, navic jiz zminene INSERTy a UPDATE.
Dibi je skvelej framework, proto me mrzi, ze ho nemuzu vyuzivat na
maximum :(
To je poměrně zvláštní chování, že to u jednoho identifikátoru
projde a u druhého ne. Každopádně bych doporučil vytvořit vlastní
driver, například potomka DibiOdbcDriver s jedinou metodou
escape($value, $type). A pro $type ===
dibi::IDENTIFIER vracet řetězec $value escapovaný podle
potřeby.