Size: a a a

2020 April 27

A

Adel in PHP
Volodymyr Melko
https://github.com/gajus/slonik#routing-queries-to-different-connections
мне кажется или тут запросы вида insert from select будут в слейв фигачить?
вообще бредятина. так вот поиском по тексту решать. а так, там во время write запроса, и селекты надо из мастера таскать.
источник

A

Aleksandr Khristenko in PHP
Pavel "Al'gerd" Patapau
А  разница между темплейт литералами и " в пхп в том что нельзя использовать выражения|константы?
темплейт литералы могут быть еще теггироваными, т.е. есть легкая возможность передать уже разобранный на части литерал внутрь функции
источник

SP

Sergey Protko in PHP
именно. то есть вот этот кейс "а что если я случайно передам параметр без этой $sql функции" просто закрывается как класс
источник

SP

Sergey Protko in PHP
для php тебе надо будет что-то что будет предоставлять доп гарантии что никто не накосячит
источник

SP

Sergey Protko in PHP
для js у тебя в функцию-тэг уже приходят куски строк отдельно и параметры отдельно, и там ты уже собираешь как тебе надо в контролируемых условиях
источник

SP

Sergey Protko in PHP
но для разработчика это выглядит как стандартная интерполяция
источник

SP

Sergey Protko in PHP
оч мощная штука для построения примитивных dsl
источник

AM

Artem Molotov in PHP
Sergey Protko
для js у тебя в функцию-тэг уже приходят куски строк отдельно и параметры отдельно, и там ты уже собираешь как тебе надо в контролируемых условиях
а что мешает в js передать параметр как часть строки?
источник

AM

Artem Molotov in PHP
там есть какая-то проверка от этого?
источник

AM

Artem Molotov in PHP
хотя там неиспользование ${}  будет заметным
источник

AM

Artem Molotov in PHP
и нужно плюсовать
источник

A

Aleksandr Khristenko in PHP
Sergey Protko
для php тебе надо будет что-то что будет предоставлять доп гарантии что никто не накосячит
Так и в пхп можно так сделать элементарно. Делаем, чтобы все функции, которые выполняют какую-то работу в базе принимали не строку, а объект. И делаем функцию преобразования строки в этот объект.
В слонике, кмк так и сделано.
источник

AM

Artem Molotov in PHP
всё, вкурил
источник

SP

Sergey Protko in PHP
Artem Molotov
а что мешает в js передать параметр как часть строки?
execute('raw string ' + inject) // fails on typecheck
execute(`raw string ${inject}`) // fails on typecheck
execute(sql`raw string ${inject}`) // passes
источник

SP

Sergey Protko in PHP
Aleksandr Khristenko
Так и в пхп можно так сделать элементарно. Делаем, чтобы все функции, которые выполняют какую-то работу в базе принимали не строку, а объект. И делаем функцию преобразования строки в этот объект.
В слонике, кмк так и сделано.
да но в слонике за это тег отвечает. Ты можешь эту проверку и там обойти, суть в том что... ну вот

fn($sql) => "SELECT 1 FROM users where id = $id"


и как бы уже не безопасно и ты это дело никак не распарсишь
источник

AM

Artem Molotov in PHP
Sergey Protko
execute('raw string ' + inject) // fails on typecheck
execute(`raw string ${inject}`) // fails on typecheck
execute(sql`raw string ${inject}`) // passes
я скорее о случае в стиле execute(sql`raw string ` + inject)
источник

AM

Artem Molotov in PHP
но до такого нужно постараться додуматься
источник

A

Aleksandr Khristenko in PHP
Sergey Protko
да но в слонике за это тег отвечает. Ты можешь эту проверку и там обойти, суть в том что... ну вот

fn($sql) => "SELECT 1 FROM users where id = $id"


и как бы уже не безопасно и ты это дело никак не распарсишь
Ну, тэг там это просто вызов функции.
Только передается не голая строка а уже распашренная.
источник

SP

Sergey Protko in PHP
Artem Molotov
я скорее о случае в стиле execute(sql`raw string ` + inject)
получишь type error потому что `sql`raw string`` вернет тебе объект
источник

SP

Sergey Protko in PHP
Aleksandr Khristenko
Ну, тэг там это просто вызов функции.
Только передается не голая строка а уже распашренная.
я вкурсе)
источник