sql 参数化查询问题
一、正确案例
string name=“梅”;
string sql="select * from test where Name like @Name";
//包含 梅
SqlParameter par=new SqlParameter("@Name","%"+name+"%");
// 以 梅 开头
SqlParameter par=new SqlParameter("@Name", name+"%");
// 以 梅 结尾
SqlParameter par=new SqlParameter("@Name", "%"+name);
二 错误案例
string name=“梅”;
// 多加 单引号 ‘’ ,@Name 被识别为字符串而不是参数。
string sql="select * from test where Name like '@Name' ";
SqlParameter par=new SqlParameter("@Name","%"+name+"%");
//相同错误变种1
string sql="select * from test where Name like '%@Name%' ";
SqlParameter par=new SqlParameter("@Name", name);
//相同 错误变种2
string sql="select * from test where Name like ' %" + "@Name"+"%' ";
SqlParameter par=new SqlParameter("@Name", name);
主要是对单引号的理解错误。 参数化查询中对字符串类型会自动处理,不需要手动添加单引号。
三 一种可行,但没有用到参数化查询的方法
// sql 简单拼接(存在sql注入攻击的风险)
string name=“梅”;
string sql="select * from test where Name like ' %" + name+ "%' ";
四、动漫化:
我仿佛听到动漫人物“字符串”: 讨厌,人家是自带胸器(单引号)的啦!
配乐响起:just 地雷,just 地雷,地雷 ~地雷~
参考来源:https://bbs.csdn.net/topics/100119798
sql 参数化查询问题的更多相关文章
- SQL参数化查询自动生成SqlParameter列表
string sql = @"INSERT INTO stu VALUES (@id,@name) "; 参数化查询是经常用到的,它可以有效防止SQL注入.但是需要手动去匹配参数@ ...
- SQL 参数化查询 应用于 Like
在sql 进行参数化查询的时候,使用like 语句和参数的时候,错误的写法: Participant like '%@Participant%' ,这样在数据库为解析为 '%'participant ...
- SQL参数化查询--最有效可预防SQL注入攻击的防御方式
参数化查询(Parameterized Query 或 Parameterized Statement)是访问数据库时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值. 在使用参 ...
- SQL参数化查询的问题
最近碰到个问题, SQL语句中的 "... like '%@strKeyword%'"这样写查不出结果, 非的写成 "... like '%" + strKey ...
- sql 参数化查询
在初次接触sql时,笔者使用的是通过字符串拼接的方法来进行sql查询,但这种方法有很多弊端 其中最为明显的便是导致了sql注入. 通过特殊字符的书写,可以使得原本正常的语句在sql数据库里可编译, ...
- SQL参数化查询
参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) ...
- mybatis的sql参数化查询
我们使用jdbc操作数据库的时候,都习惯性地使用参数化的sql与数据库交互.因为参数化的sql有两大有点,其一,防止sql注入:其二,提高sql的执行性能(同一个connection共用一个的sql编 ...
- sql参数化查询避免注入漏洞的原因探析
网上其他同学的都说是重用执行计划,将用户输入的作为文本查询,到底如何实现,我用下面三行代码来解析一下. DECLARE @test NVARCHAR() SET @test=' or 1='1 SEL ...
- sql参数化查询in的参数
private Query setParameter(Query query, Map<String, Object> map) { if (map != null) { Set<S ...
随机推荐
- java实现多线程使用多个代理ip的方式爬取网页页面内容
项目的目录结构 核心源码: package cn.edu.zyt.spider; import java.io.BufferedInputStream; import java.io.FileInpu ...
- 熟悉HBase基本操作
1. ssh localhost start-dfs.sh start-hbase.sh hbase shell create 'Student', 'S_No', 'S_Name', 'S_Sex' ...
- Lesson 27 A wet night
Text Late in the afternoon, the boys put up their tent in the middle of a feild. As soon as this was ...
- 企业IT管理员IE11升级指南【10】—— 如何阻止IE11的安装
企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...
- 微信小程序开发资料
微信开放平台:主要面向App开发者.通常是拥有成熟的应用程序后,通过开放平台将内容分享到朋友圈或发送给某个微信好友/群.例如QQ音乐分享,美图秀秀修改过的照片直接发朋友圈或聊天. 微信公众平台:强 ...
- rz快速上传文件到ssh服务器
[root@k8s01 ~]# rz --helprz version 0.12.20Usage: rz [options] [filename.if.xmodem]Receive files wit ...
- [Swift]LeetCode805. 数组的均值分割 | Split Array With Same Average
In a given integer array A, we must move every element of A to either list B or list C. (B and C ini ...
- PHP算法之冒泡排序
//冒泡排序 //①思路,先比较出第一次,找一个最大的值,排到最后; //②重复count遍之后,就能得到排序; //③优化,每一次循环之后不需要再次全部重复; $array = [11,5,4,58 ...
- Windows系统下安装Redis
1.首先你要有redis-latest-windws和redisclient-客户端工具 2.在redis-latest-windws文件夹内创建一个批处理文件 start.bat 创建批处理文件的 ...
- Docker基础命令和时区问题
Docker 命令 1. 安装Docker # ubuntu系统安装 $ sudo apt install docker-ce # 启动docker $ sudo systemctl start do ...