In PHP, I've found a few methods to prevent Sql Injection. Binding parameters is one of them. But I'm unable to find a complete explanation of how binding parameters actually prevent Sql Injection. I was of the notion that binding parameters simply save time in binding different data to the same Sql statement. How does prevention of Sql injection come into picture?
Asked
Active
Viewed 4,749 times
7
-
4I recommend reading http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – MonkeyZeus May 25 '16 at 12:12
-
Here is a thorough explanation that is exactly addressing your confusion, [The Hitchhiker's Guide to SQL Injection prevention::Prepared statemens](https://phpdelusions.net/sql_injection#prepared) – Your Common Sense May 25 '16 at 12:32
1 Answers
25
I think a simple example will explain you the thing:
"select * from myTable where name = " + condition;
imagine that user input as a condition
is
'123'; delete from myTable; commit;
what happens then? the query executed will be
select * from myTable where name = '123'; delete from myTable; commit;
or actually we have three queries with disastrous consequences:
select * from myTable where name = '123';
delete from myTable;
commit;
in case of bind variables
"select * from myTable where name = @prmName"
whatever user input is it'll be one and only one query and the weird input above will always be treated as a string, not as a part of query. The outcome will be (most probably) an empty cursor, since there're no name
s within myTable
like
"'123'; delete from myTable; commit;"

Dmitry Bychenko
- 180,369
- 20
- 160
- 215
-
1Just the explanation I needed which I was unable to get anywhere. Thanks. – Mithil Bhoras May 25 '16 at 12:22
-