$ npm install mysql
有关之前的0.9.x版本的信息, 请访问 v0.9分支。
有时我还会要求你从Github安装最新版以检查bug是否已修复。在这种情况下,请输入:
$ npm install mysqljs/mysql
引言
这是node.js的mysql驱动。它是用JavaScript编写的,不需要编译,完全遵循MIT许可协议。
下面是一个如何使用它的例子:
var mysql = require('mysql')
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret',
database : 'my_db'
})
connection.connect()
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) throw err
console.log('The solution is: ', rows[0].solution)
})
connection.end()
从这个例子中,你可以了解到以下几点:
对于一个连接,你所调用的每个方法都是按顺序排队并依次执行的。
使用end()关闭连接,以确保给mysql服务器发送退出(quit)包以前执行所有剩余的查询。
推荐的建立链接的一个方法:
var mysql = require('mysql')
var connection = mysql.createConnection({
host : 'example.org',
user : 'bob',
password : 'secret'
})
connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack)
return
}
console.log('connected as id ' + connection.threadId)
})
然后,我们可以通过建立一个连接来进行查询:
var mysql = require('mysql')
var connection = mysql.createConnection(...)
connection.query('SELECT 1', function(err, rows) {
// connected! (unless `err` is set)
})
以上二种方法都是正确且合适的。至于如何取舍,就要看你怎么去处理所遇到的错误了。不管哪种类型的错误,那都是致命的,我们需要去看所提示的具体的错误信息。
连接参数
在建立新连接时,可以设置以下参数:
host:连接的数据库地址。(默认:localhost)
port:连接地址对应的端口。(默认:3306)
localAddress: 源IP地址使用TCP连接。(可选)
socketPath:当主机和端口参数被忽略的时候,可以填写一个Unix的Socket地址。
user: mysql的连接用户名。
password: 对应用户的密码。
database: 所需要连接的数据库的名称。(可选)
charset: 连接的编码形式。这就是mysql中的整理。(例如:utf8_general_ci)如果被指定,则作为默认的整理排序规则。(默认:utf8_general_ci)
timezone:用来保存当前本地的时区。(默认:local)
connectTimeout: 设置在连接的时候,超过多久以后未响应则返回失败。(默认:10000)
stringifyObjects: stringify对象代替转换值。issue# 501。(默认:false)
insecureAuth:使用旧(不安全)的连接方式去连接MySQL。(默认:false)
typeCast: 确定列值是否需要转换为本地JavaScript类型。(默认:true)
queryFormat:自定义查询的方式。地址:Custom format.
supportBigNumbers: 如果你使用了BIGINT和DECIMAL格式的表列,那么需要开启这个参数来支持。(默认:false)只有当他们超过JavaScript所能表达的 最长的字节的时候,如果没有设置这个参数,则会将过长的数字作为字符串传递。否则,返回对象的长度。如果supportBigNumbers参数被忽略, 则这个参数也会被忽略。
dateStrings:一些日期类型(TIMESTAMP, DATETIME, DATE)会以Strings的类型返回,然后转换成JavaScript的日期对象。(默认:false)
debug:是否把连接情况打印到文件。(默认:false)
trace: 生成错误的堆栈跟踪,包括库入口的调用位置(“长堆栈的轨迹”)。一般会造成轻微的性能损失。(默认:true)
终止连接
终止连接的方法有两种。调用end()方法可以正常地终止一个连接:
connection.end(function(err) {
// 连接终止
})
这种方法将确保给MySQL服务器发送COM_QUIT包之前所有队列中的查询都会被执行。如果在发送COM_QUIT包之前发生了致命错误,那么会给回调函数传递一个err参数,但是不管怎样连接都会关闭。
另外一种终止连接的方法是调用destroy()方法。该方法会立即终止底层套接字(underlying socket)。另外,destroy()不会触发更多的事件和回调函数。
Nodejs要连接MySQL,可以使用Nodejs的MysQL驱动来实现。比如,我们这里使用“node-mysql”连接数据库。我们使用下面的方式来连接数据库:首先,我们需要使用nodejs的包管理工具(npm)安装mysql的驱动。命令行如下:
[plain] view plain copy
npm install musql
现在,要在js文件中使用mysql,添加下面的代码到你的文件中:
[plain] view plain copy
是否有漏洞与代码有关,与此无关
其中主流的连接MySQL的方式是用mysql或者mysql2包,它们只是提供了调用驱动的api。很多框架中包括egg,nest都是基于此封装的。
但这不是SQL注入的关键,它只是一种连接方式。它只管连接,不管其他的,存不存在SQL注入完全靠写代码的人本身啊。
一句脚本本没有问题(知道不让直接放sql的,也是放注入),但是你如果让SQL变成由用户输入拼接而成,那就存在SQL注入的风险。
你应该去了解SQL注入的原理,然后进行防患,百度就能找到,然后可以用ORM,一般都对输入做了处理,还能避免直接写SQL(但其实难的地方还得自己写)。
有不理解可以追问。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)