参数类型验证
注意: 在mysql中操作的参数类型是强验证,比如一个Number字段传入String数据会报错。
query(sql)
向数据库发起查询的两种写法
- 可以使用连接池查询
pool.query()
,也可以使用新连接查询connection.query()
。 sql
:需要执行的mysql语句。
占位符写法
这种写法通常被称为参数化查询(Parameterized Query)或预编译语句(Prepared Statement)。这种做法通过在SQL语句中使用占位符(如问号
?
或命名参数:paramName
),然后在执行时再提供具体的值。这样做可以有效防止SQL注入攻击,因为数据库驱动会确保提供的参数被正确地转义和处理。
- 需要在
query(sql,[...values])
的第二个参数要按sql里?
占位符的顺序依次传入参数以[]数组形式
(单个数据也要包裹在数组里),如['123', 2, '33']
、[32]
。
let mysql = 'INSERT INTO user (openId, createIp, updateIp) VALUES (?, ?, ?)';
await pool.query(mysql, ['sDFdjf23GY','0.0.0.0', '192.168.0.1']);
mysql = 'DELETE FROM address WHERE addressId = ?'
await pool.query(mysql, [32]);
mysql = 'UPDATE address SET phone = ?, city = ? WHERE addressId = ?'
await pool.query(mysql, ['17688888888','杭州', 32]);
mysql = 'SELECT * FROM goods WHERE goodsId = ?'
await pool.query(mysql, [1043]);
静态SQL写法
这种写法称为静态SQL(Static SQL)或内联值(Inline Values)。这种方式将要插入的具体值直接写入SQL语句中。虽然它在某些情况下更加直观和简单,但当涉及到动态数据或用户输入时,如果没有适当的安全措施,可能会导致安全风险,尤其是SQL注入。
let mysql = 'INSERT INTO user (openId, createIp, updateIp) VALUES ('sDFdjf23GY', '0.0.0.0', '192.168.0.1')';
await pool.query(mysql);
mysql = 'DELETE FROM address WHERE addressId = 32'
await pool.query(mysql);
mysql = 'UPDATE address SET phone = '17688888888', city = '杭州' WHERE addressId = 32'
await pool.query(mysql);
mysql = 'SELECT * FROM goods WHERE goodsId = 1043'
await pool.query(mysql);
增 INSERT
INSERT INTO
后面跟着的是需要操作的表名。VALUES
前面是字段名,不用''
单引号包裹字段名。VALUES
后面是参数,顺序必须和前面字段名顺序一样。- 在
INSERT
中VALUES
前后字段和参数的()
括号都不能省略(单个字段也不能省略)。
mysql = 'INSERT INTO user (openId, createIp, updateIp) VALUES (?, ?, ?)';
await pool.query(mysql, ['sDFdjf23GY','0.0.0.0', '192.168.0.1']);
mysql = 'INSERT INTO user (openId, createIp, updateIp) VALUES ('sDFdjf23GY', '0.0.0.0', '192.168.0.1')';
await pool.query(mysql);
删 DELETE
FROM
后面跟着的是需要操作的表名。
mysql = 'DELETE FROM address WHERE addressId = ?'
await pool.query(mysql, [32]);
mysql = 'DELETE FROM address WHERE addressId = 32'
await pool.query(mysql);
改 UPDATE
UPDATE
后面跟着的是需要操作的表名。SET
后面填写需要修改的字段和参数字段名 = 参数
,如果有多个字段需要修改使用,
拼接。如:SET phone = '111'
、SET phone = '111', city = '杭州'
。
注意SET后面最后一个字段和参数后面不能加逗号。
mysql = 'UPDATE address SET phone = ?, city = ? WHERE addressId = ?'
await pool.query(mysql, ['17688888888','杭州', 32]);
mysql = 'UPDATE address SET phone = '17688888888', city = '杭州' WHERE addressId = 32'
await pool.query(mysql);
查 SELECT
SELECT
后面表示要返回的字段,*
返回所有字段,字段名
返回特定字段,返回多个字段用,
拼接。如:SELECT count
、SELECT count, pirce
。
注意SELECT后面最后一个字段名后面不能加逗号。FROM
后面跟着的是需要操作的表名。
mysql = 'SELECT * FROM goods WHERE goodsId = ?'
await pool.query(mysql, [1043]);
mysql = 'SELECT * FROM goods WHERE goodsId = ?'
await pool.query(mysql, [1043]);