1개의 쿼리로 여러 개의 문을 노드 검출
사용하고 있다nodejs 10.26
+express 3.5
+node-mysql 2.1.1
+MySQL-Server Version: 5.6.16
.
4개의 DELETE가 있고 데이터베이스 요청은 1개뿐이기 때문에 DELETE 명령어를 ";"로 연결했지만 항상 실패합니다.
var sql_string = "DELETE FROM user_tables WHERE name = 'Testbase';";
sql_string += "DELETE FROM user_tables_structure WHERE parent_table_name = 'Testbase';";
sql_string += "DELETE FROM user_tables_rules WHERE parent_table_name = 'Testbase';";
sql_string += "DELETE FROM user_tables_columns WHERE parent_table_name = 'Testbase';";
connection.query(sql_string, function(err, rows, fields) {
if (err) throw err;
res.send('true');
});
다음의 에러가 발생합니다.
Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE FROM user_tables_structure WHERE parent_table_name = 'Testbase';DELETE FR' at line 1
그러나 이 SQL을 PhpMyAdmin에 붙여넣으면 항상 성공합니다.
내가 한 번에 쓴다면 그것 역시 성공입니다.
connection.query("DELETE FROM user_tables WHERE name = 'Testbase'", function(err, rows, fields) {
if (err) throw err;
connection.query("DELETE FROM user_tables_structure WHERE parent_table_name = 'Testbase'", function(err, rows, fields) {
if (err) throw err;
connection.query("DELETE FROM user_tables_rules WHERE parent_table_name = 'Testbase'", function(err, rows, fields) {
if (err) throw err;
connection.query("DELETE FROM user_tables_columns WHERE parent_table_name = 'Testbase'", function(err, rows, fields) {
if (err) throw err;
res.send('true');
});
});
});
});
도와줘서 고마워요!
node-mysql을 사용하고 있다고 생각합니다.(단, node-mysql2에서도 동작합니다.)
문서는 다음과 같이 기술되어 있습니다.
여러 문의 지원은 보안상의 이유로 디세블로 되어 있습니다(값이 올바르게 이스케이프되지 않은 경우 SQL 주입 공격을 허용합니다).
다중 스테이트먼트 쿼리
이 기능을 사용하려면 연결을 위해 이 기능을 활성화해야 합니다.
var connection = mysql.createConnection({multipleStatements: true});
활성화되면 각 문을 세미콜론으로 구분하여 여러 문을 사용하여 쿼리를 실행할 수 있습니다.;
. 결과는 각 스테이트먼트의 배열이 됩니다.
예
connection.query('SELECT ?; SELECT ?', [1, 2], function(err, results) {
if (err) throw err;
// `results` is an array with one element for every statement in the query:
console.log(results[0]); // [{1: 1}]
console.log(results[1]); // [{2: 2}]
});
이 기능을 유효하게 했을 경우,multipleStatements
첫 번째 코드가 작동해야 합니다.
아래와 같은 "multiplacements: true"를 사용하는 것이 효과적이었다.
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: '',
multipleStatements: true
});
connection.connect();
var sql = "CREATE TABLE test(id INT DEFAULT 1, name VARCHAR(50));ALTER TABLE test ADD age VARCHAR(10);";
connection.query(sql, function(error, results, fields) {
if (error) {
throw error;
}
});
DB(SQL)에서 데이터를 가져오려면 다음 함수가 올바르게 작동합니다.
router.getflash/', 함수 메시지함수(req, res){ //res.send('안녕하세요 Rasikh님, 테스트 페이지에 오신 것을 환영합니다.' //=> 단방향 dbConn.query('SELECT COUNT(이름)'를 카운트한 값, 이름, 성, 전화, 학생의 이메일, 함수(err, 행, 필드) {// (err) throw err의 경우 다른 방법
dbConn.query('SELECT name, author from books',
function (err, rowsBook, fields) { // another Way
if (err) throw err
// console.log('The counted is: ', rows[0].counted); //=> Display in console
// res.send('Hi Dear Rasikh, Welcome to Test Page.'+ rows[0].counted) //=> Display in blank page
res.render('main/index',{data:rows, myData:rowsBook});
})
}); });
언급URL : https://stackoverflow.com/questions/23266854/node-mysql-multiple-statements-in-one-query
'sourcecode' 카테고리의 다른 글
MariaDB 일반 로그가 작동하지 않음 (0) | 2022.09.24 |
---|---|
mysql 함수 GROUPINT이 존재하지 않습니다. (0) | 2022.09.24 |
PHP 변수에서 클래스를 인스턴스화하시겠습니까? (0) | 2022.09.24 |
JavaScript 개체의 속성을 열거하려면 어떻게 해야 합니까? (0) | 2022.09.24 |
MySQL에서 foreignKey 값에 대한 관련 데이터가 있는 모든 테이블을 가져오는 방법 (0) | 2022.09.23 |