Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 2 lety

Miloš Němec
Nový člen
Registrovaný: 29. 9. 2009
Příspěvky: 7

Význam hranatých závorek

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');
?>

 

#2 před 2 lety

Honza M.
Moderator
Registrovaný: 31. 3. 2007
Příspěvky: 1576

Re: Význam hranatých závorek

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.

 

#3 před 2 lety

Miloš Němec
Nový člen
Registrovaný: 29. 9. 2009
Příspěvky: 7

Re: Význam hranatých závorek

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`");
?>

 

#4 před 2 lety

Honza M.
Moderator
Registrovaný: 31. 3. 2007
Příspěvky: 1576

Re: Význam hranatých závorek

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 `.

 

#5 před 2 lety

Miloš Němec
Nový člen
Registrovaný: 29. 9. 2009
Příspěvky: 7

Re: Význam hranatých závorek

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ěď.

 

#6 před 2 lety

paranoiq
dibi guru
Registrovaný: 14. 11. 2006
Příspěvky: 350

Re: Význam hranatých závorek

`` 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

 

#7 před 2 lety

kravčo
Moderator
Registrovaný: 15. 6. 2008
Příspěvky: 791

Re: Význam hranatých závorek

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"

 

#8 před 2 lety

shew
Nový člen
Registrovaný: 10. 11. 2009
Příspěvky: 8

Re: Význam hranatých závorek

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 :)

 

#9 před 2 lety

shew
Nový člen
Registrovaný: 10. 11. 2009
Příspěvky: 8

Re: Význam hranatých závorek

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 :(

 

#10 před 2 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5548

Re: Význam hranatých závorek

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.

 

Zápatí