位置: 编程技术 - 正文

Node.js数据库操作之查询MySQL数据库(二)(nodejs json数据库)

编辑:rootadmin

推荐整理分享Node.js数据库操作之查询MySQL数据库(二)(nodejs json数据库),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs json数据库,node 数据库操作,node 数据库操作,node 数据库操作,nodejs数据库操作,node 数据库操作,nodejs数据库连接,node 数据库操作,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

我们在上一篇文章《Node.js数据库操作之连接MySQL数据库(一)》中已经学习了Nodejs连接MySQL数据库的几种方法,数据库连接上了之后就需要对数据库进行查询。本篇文章介绍一下查询MySQL数据库的方法。下面话不多说,来看看详细的介绍吧。

查询方式

上一篇文章中,我们用到了一种查询数据库的最基本的方法:connection.query(sqlString, callback) 。

第一个参数是一个SQL语句,可以是任意的数据库语句,而第二个参数是一个回调函数,查询结果通过回调参数的方式返回。

这是最简单的查询方式,但是存在着两个问题,一个是需要拼接字符串,比较繁琐;另一个是容易被sql注入攻击,因此我们有了第二种查询方式。

占位符注入查询

第二种查询方式是采用了占位符的形式connection.query(sqlString, values, callback) ,这样就不需要进行恶心的字符串的拼接了。

使用对象查询方式

第三种查询方式我们将查询语句和查询值组合成一个对象来进行查询。它的形式是这样的:connection.query(object, callback) 。

组合查询方式

将第二种和第三种方式可以结合起来使用,查询值作为query方法的一个参数,而不是作为对象中的一个属性。

需要注意的是,如果我们既将查询值作为对象的属性,又将其作为query函数的参数,这个时候函数中的参数将会覆盖对象的属性,也就是说此时只有参数的值生效。

解析查询值

Node.js数据库操作之查询MySQL数据库(二)(nodejs json数据库)

在进行数据库查询时,有一个重要的原则就是永远不要相信用户的输入。为什么不能相信用户的输入呢,首先让我们来了解一下SQL注入攻击。

SQL注入攻击

所谓的SQL注入攻击,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。由于笔者并不是从事数据库方面的工作,也不是数据库方面的砖家,所以只能通过一个简单的DEMO来演示一下SQL注入攻击。

假如我们拼接的SQL语句是这样的

这里我们期待用户输入的username是Jack或者LiLi之类的,但是用户说我偏不,我就输入一串恶意代码:

最后我们拼接的查询语句就变成了下面这样的:

如果读者对SQL语句有一些基本了解,就会知道如果把这段查询语句放到数据库中进行查询,那么所有用户的信息都被查出来了,但是这并不是我们想要看到的结果。

避免SQL注入攻击

那么怎么才能避免SQL注入攻击呢?mysql提供了两种方法给我们,第一种方法就是每次查询时都把用户输入的数据都用escape()函数解析一下,有点类似预处理语句。

第二种方法就是在查询时通过上面说到的占位符注入查询的查询方式来进行查询。但它内部的实现也是通过上面所说的escape()方法将用户输入解析了一下。推荐使用第二种方法来得简单快捷。

多语句查询

mysql还支持多语句查询,但是由于某些安全原因(官方解释是因为如果值没有正确解析会导致SQL注入攻击)默认是被禁止的。那么让我们来打开这个“潘多拉魔盒”把。

在创建数据库连接时首先把这个功能开启。

然后我们就可以使用多语句查询了。

查询结果

通过查询语句返回的结果以数组的形式返回,如果是单语句查询,数组就是一个纯对象数组[obj1,obj2,...],数组中的每一个对象都是数据库中每一行的数据,只是以对象的方式返回。如果没有查询到数据,那么数组的长度就为0。

但是如果是多语句(m条语句)的方式查询,虽然返回也是一个数组,但是数组中嵌套有n个数组,n的取值取决于你查询语句的条数m(即n=m)。

总结

由于官方文档比较零碎,因此整理得不是很到位,有问题的地方希望大家指正。

标签: nodejs json数据库

本文链接地址:https://www.jiuchutong.com/biancheng/376402.html 转载请保留说明!

上一篇:Node.js数据库操作之连接MySQL数据库(一)(nodejs数据库数据渲染)

下一篇:详解nodeJS中读写文件方法的区别(nodejs怎么读)

  • 在建工程转固定资产需要交税吗
  • 缓交的社保费,包括个人部分
  • 销售防疫物资免水洗手液需要什么许可证
  • 已申报个税减免什么意思
  • 汽车牌照费用标准
  • 企业出资怎么填写
  • 中介行业风险
  • 资产减值测试是什么意思
  • 应缴纳的所得税税额
  • 学生兼职需要交什么税
  • 小规模纳税人增值税超过30万怎么纳税
  • 高新企业研发费用认定条件
  • 电子发票作废怎么做
  • 购进原材料影响营业利润吗
  • 下列各项支出中,允许用现金支付的有
  • 原材料计入什么账本
  • 美元兑人民币分时走势图
  • 财务报表申报错了怎么撤销
  • 收到押金和支付押金的账务处理
  • 费用报销单应怎样填写
  • 鼠标反应迟钝是什么原因
  • 集团内部资金往来用什么科目核算
  • 若依前后端分离需要准备啥
  • 总资产收益率什么意思
  • 确认预计负债的必要条件
  • 工程在建期间土地税滞纳金
  • 模具成本怎么核算
  • 计提增值税的会计科目
  • win10为什么每次开机都要输入微软密码
  • WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
  • 新版win10任务栏
  • 台式电脑清洗步骤图解
  • 开发商卖房子要交多少营业税
  • 房地产计提税金的会计分录
  • 在建工程账务核算方法
  • php注册功能的实现
  • 前端file对象
  • 税金及附加在哪里申报
  • 出租车发票能不能多开
  • 论文笔记模板
  • php获取文件名称
  • 慰问金计入什么预算科目
  • 应收账款保理会计处理相关会计准则
  • 购买工程物资是什么费用
  • 预提费用做账的会计分录
  • 发票已经做账但要退款账不平咋办
  • 企业账户在银行买黄金可以开发票吗
  • 利用java实现计算器
  • MySQL中distinct与group by语句的一些比较及用法讲解
  • 待认证进项税额认证以后怎么做分录
  • 付款方押金无法退还
  • 差旅费报销过程中会计和出纳分别做什么
  • 结转本年利润的摘要怎么写
  • 建筑企业外经证需要准备什么资料
  • 非公司员工机票能报销吗
  • 货款折扣的账务处理
  • 预缴土地增值税的会计处理
  • 会计刚开始学什么
  • 公账钱怎么取出
  • mysql中自定义函数属于那个
  • SQL 中sp_executesql存储过程的使用帮助
  • mysql5.7慢查询
  • 下载win10 32位
  • mac的废纸篓
  • ubuntu安装lnmp环境
  • win8系统出现蓝屏怎样处理
  • 开机提示按CTRL+ALT+DEL,无限重启怎么办
  • 怎样把系统及软件迁移到固态
  • win7系统出现问题怎么修复
  • win10系统保留分区可以删除吗
  • android滑动选择
  • javascript中有几种数据类型
  • 奇门遁甲实例详解
  • firefox浏览器标识ua
  • Python类的继承动物类
  • js原型作用
  • jquery网页制作
  • js编写一个标准的单例模式类
  • 扣缴个人所得税怎么计算
  • 蜂窝煤利润怎么样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设