#是占位符,在DBMS才进行替换,在预编译时使用?占位,能防止sql注入;
$是拼接符,在动态sql解析阶段将会进行变量替换,有可能会引发sql注入,如:

select * from ${tableName} where name = #{name} 

参数 tableName 为 user; delete user; --,那么动态解析之后,预编译之前,将变为

select * from user; delete user; -- where name = ?; 

能用#就不要用$

$有可能引发sql注入问题,其次,相同的预编译能重复利用,而是用#会比较容易遇到相同的预编译;

表名必须用$

因为使用#替换字符串时,会带上单引号,但是表名不能待用单引号(反引号例外)
PS:sql 预编译指的是数据库驱动在发送 sql 语句和参数给 DBMS 之前对 sql 语句进行编译,这样 DBMS 执行 sql 时,就不需要重新编译。

相关文章:

  • 2022-12-23
  • 2021-07-14
  • 2021-11-13
  • 2021-11-24
  • 2021-10-13
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-21
  • 2022-12-23
  • 2021-06-27
  • 2021-09-01
  • 2021-07-17
相关资源
相似解决方案