On Thursday, 4 January 2024 at 18:03:56 UTC, Leonardo wrote:
On Saturday, 30 December 2023 at 22:11:55 UTC, Steven Schveighoffer wrote:
auto andrei = db.fetchOne(select(ads).where(ads.firstname, " = 'Andrei'"));

How SQL injection are avoided here?

SQL injection is avoided by passing parameter data. You use the `param` wrapper.

So if you had unqualified user input, it would be:

```d
string personname = getFromUser();
auto author = db.fetchOne(select(ads).where(ads.firstname, " = ", personname.param);
```

For everything except strings, it is a static error to pass them in without the `.param` wrapper. For strings, I can't help it, there is no mechanism to find out whether you are writing SQL or giving me a parameter.

This should be fixable if interpolation ever happens (and I can get rid of the requirement for `.param`).

-Steve

Reply via email to