node.jsとmysqlを使用して複数の選択クエリを配置しようとしました。しかし、コンソールはいくつかのログを出力し、SQLに何か問題があることを示しています。
また、multipleStatementsを作成しました:true;
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 5,
host : '*.*.*.*',
user : 'root',
password : '****',
database : 'db',
multipleStatements: true
});
このコードは、ネットワークアドレスとサブネットマスクを使用してホストアドレスを計算するために作成しました。計算したホストIPアドレスに一致する行を選択したい。
私はSQL配列を作成し、SQLを配列に入れました..そしてそれを文字列形成にし、1つのSQLステートメントとして解析しました(つまり、sql: "sql1; sql2; sql3; ....")
pool.getConnection(function(err, connection){
var sql ="";
var new_sql = new Array();
if(req.body.search_network){
var search_data = [req.body.search_network, req.body.search_subnet];
console.log("*****:"+search_data);
//calculating host addresses
var NETWORK = req.body.search_network;
var SUBNET = req.body.search_subnet;
var host_cnt = Math.pow(2,(32-SUBNET));
var split_net = NETWORK.split('.');
var NET_1 = Number(split_net[0]);
var NET_2 = Number(split_net[1]);
var NET_3 = Number(split_net[2]);
var NET_4 = Number(split_net[3]);
//network address
console.log(NET_1+"."+NET_2+"."+NET_3+"."+NET_4);
console.log(Math.floor(1/Math.pow(256,3)));
for (var i=1; i<host_cnt-1; i++){
var new_NET_1 = NET_1 + Math.floor(i/Math.pow(256,3));
var new_NET_2 = NET_2 + Math.floor(i/Math.pow(256,2));
var new_NET_3 = NET_3 + Math.floor(i/256);
var new_NET_4 = NET_4 + Math.floor(i%256);
//host address
var IP_HOST = String(new_NET_1)+"."+String(new_NET_2)+"."+String(new_NET_3)+"."+String(new_NET_4);
new_sql.push(" SELECT ARP_TBL.DEVICE_IP as device_ip, IP_MGMT_TBL.IP as ip, IP_MGMT_TBL.IP_TYPE as ip_type, IP_MGMT_TBL.PURPOSE as purpose, IP_MGMT_TBL.OWNER_NAME as name, IP_MGMT_TBL.OWNER_DIV as owner_div, IP_MGMT_TBL.REQUEST_TIME as request_time, ARP_TBL.PORT as port " + "FROM IP_MGMT_TBL left join ARP_TBL on IP_MGMT_TBL.IP = ARP_TBL.ip " +"WHERE ARP_TBL.ip="+IP_HOST);
}
sql = new_sql.join(';')+";";
console.log(sql);
// put query to DB and get results within 'rows'
connection.query(sql, function(err, rows){
if(err) console.error("err:" +err);
console.log("rows:"+ JSON.stringify(rows));
res.render('ipmgmt/detail', {rows: rows});
connection.release();
});
<!-- begin snippet: js hide: false console: true babel: false -->
; SELECT ARP_TBL.DEVICE_IP as device_ip, IP_MGMT_TBL.IP as ip, IP_MGMT_TBL.IP_TYPE as ip_type, IP_MGMT_TBL.PURPOSE as purpose, IP_MGMT_TBL.OWNER_NAME as name, IP_MGMT_TBL.OWNER_DIV as owner_div, IP_MG
MT_TBL.REQUEST_TIME as request_time, ARP_TBL.PORT as port FROM IP_MGMT_TBL left join ARP_TBL on IP_MGMT_TBL.IP = ARP_TBL.ip WHERE ARP_TBL.ip=101.1.47.254;
err: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 '.47.1; SELECT ARP_TBL.DEVICE_IP as dev
ice_ip, IP_MGMT_TBL.IP as ip, IP_MGMT_TBL.' at line 1
rows:undefined
これはコンソールログが言ったことです。また、それは完全なログの一部です。SQLクエリは問題ないように見えますが、クエリでは機能しません。
引用符で囲む必要があるIPアドレスは、構文エラーの基本的な解決策です。フォームのクエリを使用して、複数のクエリの必要性を排除します。
... WHERE ARP_TBL.ip IN ('ip address1', 'ip address 2', ...)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加