# 动态语句 和 SQL 注射

__*SQL 注射*__

+ 到目前为止,我们都在处理动态语句
+ 我们构建 SQL 语句都是字符串, TiDB 服务器实例把字符串编译为可执行的 SQL 语句
+ 在应用程序里,绝大多数时候你并不愿意提供这么多的灵活性
+ 比如, 当你设计一个可以接受变量的语句:
  + `DELETE FROM test.r1 WHERE name = '?'` 
  + 而用户输入的内容为: `x' or 'x'='x`: 

```11
tidb> DELETE FROM test.r1 WHERE ~!@name = 'x' or 'x'='x'@!~;
Query OK, ~!@16384@!~ rows affected (0.35 sec)

tidb> SELECT count(*) FROM test.r1;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.01 sec)
```
-----------------------------------------------------------------------

SQL注入是一种代码注入技术,用于攻击数据驱动的应用程序,其中恶意SQL语句被插入到输入字段中进行执行