рд╢рд╛рдпрдж рд▓реЗрдЦ рдХрд╛ рдереЛрдбрд╝рд╛ рдЬреЛрд░ рд╕реЗ рд╢реАрд░реНрд╖рдХ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╡рд╛рд▓ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛редрдкрд╣рд▓рд╛ рдХреНрд╖рдг
рдпрджрд┐ рдЖрдк рд╕рднреА рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд Zend рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рддреИрдпрд╛рд░ рдХрд░реЗрдВ - рдлрд┐рд▓рд╣рд╛рд▓ sql рдЗрдВрдЬреЗрдХреНрд╢рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рд╣рдо рдРрд╕реЗ рд╣реА рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
$select->order($value);
рдЬреЛ рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд╛рдпрд╛ред
рджреВрд╕рд░рд╛ рдХреНрд╖рдг
рдирдордХ рдХреНрдпрд╛ рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдкреИрд░рд╛рдореАрдЯрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреИрдпрд╛рд░реА рдХреЗ рдРрд╕реЗ рддрд░реАрдХреЛрдВ рдкрд░ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддрдм рднреА рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдЙрдиреНрд╣реЗрдВ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рд╕рднреА (рдФрд░ рдХреБрдЫ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ) рдирд╣реАрдВ - рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИ, рд╣рдо рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ "рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕" рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, MySQL рдПрдбрд╛рдкреНрдЯрд░,
Zend_Db_Select рд╡рд░реНрдЧ (
PgSQL рдкрд░ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)
рддреАрд╕рд░рд╛ рдХреНрд╖рдг
Zend рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд┐рдЫрд▓реА рдкрд┐рдЫрд▓реА рдмреЛрд▓реА рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ =
'table` рд╕реЗ * select * , рдпрд╛ apostrophe - (
рдЬрд╣рд╛рдБ id =' 1 ' ) рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ Zend рдирд┐рдпрдореЛрдВ рдФрд░ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ) рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд "рдлреНрд░реЗрдо" рдЦреБрд▓рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП
рдЯреИрдм рдХреЛ рдкрд╛рд╕
рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ
рдЯрд╛'рдмрд▓ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рджреВрд╕рд░реЗ рдореЗрдВ: рдЗрдирдкреБрдЯ
1'2 рдкрд░, рдЖрдЙрдЯрдкреБрдЯ
1'2 рдкрд░ ред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╣рдо "рдХрдЪреНрдЪреЗ" рддрд░реАрдХреЗ рд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдорд▓реЗ рд╣реИрдВ:
- FQ - рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ рддреИрдпрд╛рд░ рд╣реИрдВ (рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрджреНрдзреГрдд)
- NQ -data рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ "рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛", рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдХреЛрдИ рдЙрджреНрдзреГрдд рдирд╣реАрдВ)
- PQ - рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдХреБрдЫ (рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЙрджреНрдзреГрдд рдирд╣реАрдВ)
рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдХреНрд░рдо рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ
1) -> рд╕реЗ - рдПрдлрдХреНрдпреВ
рдХреЛрдб:
$table = "wp_use`rs"; $select->from($table);
[queryString] => SELECT `wp_use``rs`.* FROM `wp_use``rs`
2) -> рдЬреНрд╡рд╛рдЗрди - PQ
$table1 = 'tab`le1'; $table2 = 'tab`le2'; $key = 'i`d'; $data = 'da`ta'; $select = $db->select()->from($table1)->join($table2, $table1.'.'.$key.' = '.$table2.'.'.$key, array($data));
[queryString] => SELECT `tab``le1`.*, `tab``le2`.`da``ta` FROM `tab``le1` INNER JOIN `tab``le2` ON tab`le1.i`d = tab`le2.i`d
3) -> joinUsing - PQ
$table1 = 'tab`le1'; $table2 = 'tab`le2'; $key = 'i`d'; $column = 'c`ol\'u;m"n'; $select = $db->select()->from($table1)->joinUsing($table2, $column);
[queryString] => SELECT `tab``le1`.*, `tab``le2`.* FROM `tab``le1` INNER JOIN `tab``le2` ON `tab``le2`.c`ol'u;m"n = `tab``le1`.c`ol'u;m"n
4) -> рдХрд╣рд╛рдВ - рдПрдирдХреНрдпреВ
$select->from($table); $value = "1)2'3 --"; $select->where($value);
[queryString] => SELECT `wp_users`.* FROM `wp_users` WHERE (1)2'3 --)
5) -> рд╕рдореВрд╣ - рдПрдлрдХреНрдпреВ
$table = "wp_users"; $value = 'i`d'; $select = $db->select()->from($table)->group($value);
[queryString] => SELECT `wp_users`.* FROM `wp_users` GROUP BY `i``d`
6) -> рд╣реЛрдиреЗ - рдПрдирдХреНрдпреВ
$table = "wp_users"; $value = 'some_count > 0); hello habr -- 10'; $select = $db->select()->from($table)->having($value);
[queryString] => SELECT `wp_users`.* FROM `wp_users` HAVING (some_count > 0); hello habr -- 10)
7) -> рдЖрджреЗрд╢ - FQ
$table = "wp_users"; $value = i`d'; $select = $db->select()->from($table)->order($value);
[queryString] => SELECT `wp_users`.* FROM `wp_users` ORDER BY `i``d` ASC
8) -> рд╕реАрдорд╛ - FQ
рдпрд╣ FQ рднреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛рд╕реНрдЯ (int)
$table = "wp_users"; $limit1 = '1; hello -- '; $limit2 = '2; hello -- '; $select = $db->select()->from($table)->limit($limit1, $limit2);
[queryString] => SELECT `wp_users`.* FROM `wp_users` LIMIT 1 OFFSET 2
рдпрд╣рд╛рдБ -> limitPage (), рд╕рдорд╛рди рдХрд╛рд░реНрдп
9) -> рд╕рдВрдШ - рдПрдирдХреНрдпреВ
$ db-> рдЪрдпрди + рд╕реНрдЯреНрд░рд┐рдВрдЧ
$table = "wp_users"; $select = $db->select()->from($table); $select2 = "select * from ta\"b'le`2"; $select3 = $db->select()->union(array($select, $select2)); $db->query($select3);
[queryString] => SELECT `wp_users`.* FROM `wp_users` UNION select * from ta"b'le`2
рд╕рд╛рд░рд╛рдВрд╢ рдбреЗрдЯрд╛
FQ: -> рд╕реЗ, -> рд╕рдореВрд╣, -> рдЖрджреЗрд╢, -> рд╕реАрдорд╛, -> limitPage
PQ: -> join, -> joinUsing
NQ: -> рдХрд╣рд╛рдБ, -> рд╣реЛрдиреЗ, -> рд╕рдВрдШ
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЧреИрд░-рдлрд╝рд┐рд▓реНрдЯрд░реНрдб рдбреЗрдЯрд╛ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЬрд╛рдХреНрд╕ рд╣реИрдВрдбрд▓рд░ рдореЗрдВред
PS рд╕рдм рдХреБрдЫ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢рд╛рдпрдж рдХреЛрдИ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдЦреБрдж рдХреЛ CTF рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред
UPD: рдХреНрд╖рдг 4: рдпрд╣ рд▓реЗрдЦ рдкрдВрдЪрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╣реИ, рдЬреЛ Zend рдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред